我正在尝试编写一个代码来按升序对数组进行实际排序,所以发生的事情就是说这就是我所拥有的。
char myListArray[10][40];
myListArray = "Yeah?",
"Tomorrow",
"Again",
"I will see you";
所以会发生的是它应该按ASCII值排序。
Again
I will see you
Tomorrow
Yeah?
我创造了这样的东西......
char temp[40];
temp[0] = '\0';
int i, j, pos = 10, flag = 1;
for(i = 1; (i <= pos) && flag; i++)
{
flag = 0;
for (j=0; j < (pos -1); j++)
{
if (phrase[i][j+1] > phrase[i][j])
{
strcpy(temp, phrase[i]);
strcpy(phrase[i], phrase[i+1]);
strcpy(phrase[i+1], temp);
flag = 1;
}
}
}
现在我不知道我的逻辑有问题,我想知道是否有一个功能可以轻松排序?或bubble sort
是最简单的?
更新:
我会接受以下答案之一,但我找到了解决方法,以最简单的方式对数组进行排序。
while(pos < 9){
if(phrase[pos][i] > phrase[pos+1][i]){
strcpy(temp, phrase[pos]);
strcpy(phrase[pos], phrase[pos+1]);
strcpy(phrase[pos+1], temp);
flag = 1;
if(flag = 1){
pos = 0;
}
}
pos++;
}
答案 0 :(得分:2)
使用std::array
,std::string
和std::sort
...
std::array<std::string, 4> arr = { "Yeah?", "Tomorrow", "Again", "I will see you" };
std::sort(arr.begin(), arr.end());
如果您无法访问std::vectors
,也可以轻松使用C阵列或std::array
。
答案 1 :(得分:1)
我想知道是否有一种功能可以轻松排序?
string
,vector
和sort
。那么你的工作变得容易多了。 qsort
。您需要提供自定义比较器功能。冒泡排序是最简单的吗?
排序算法的选择取决于诸如最坏情况性能,元素数量等因素。考虑需要排序的元素数量。想想什么样的表现是可以接受的。 IMO,实现冒泡排序就像插入排序或Shell排序一样简单。合并排序/快速排序/基数排序OTOH可能稍微涉及一些。
答案 2 :(得分:1)
如果您希望它像您一样使用纯C,那么您就错过了strcmp
和qsort
。请注意,您的代码使用C ++ 无所事事,这是一个经典的C代码,问题是错误的。如果您希望在C ++中完成,请参阅其他实际使用C ++容器的答案。如果您实际上没有使用C ++,那么使用C ++是没有意义的,而不仅仅是C!
下面是一个自包含的工作示例。请注意,您的2D数组和指向字符串的指针数组都有一个示例。您的2D数组声明具有多余的第一个数组大小。这是不必要的,编译器知道有多少字符串。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void sort1(void)
{
// 2D array
char strings[][40] = {
"Yeah?",
"Tomorrow",
"Again",
"I will see you"
};
const int el_size = sizeof(strings[0]);
const int el_count = sizeof(strings)/el_size;
int i;
printf("\n%s\n", __FUNCTION__);
qsort(strings, el_count, el_size, strcmp);
for (i = 0; i < el_count; ++i) {
printf("%s\n", strings[i]);
}
}
int strcmp_ptr(const char ** a, const char ** b)
{
return strcmp(*a, *b);
}
void sort2(void)
{
// Array of pointers to string constants
const char * strings[] = {
"Yeah?",
"Tomorrow",
"Again",
"I will see you"
};
const int el_size = sizeof(strings[0]);
const int el_count = sizeof(strings)/el_size;
int i;
printf("\n%s\n", __FUNCTION__);
qsort(strings, el_count, el_size, strcmp_ptr);
for (i = 0; i < el_count; ++i) {
printf("%s\n", strings[i]);
}
}
int main(void)
{
sort1();
sort2();
return 0;
}