C-按字母顺序从标准输入排序数组
我必须在C中编写一个程序,它从标准输入读取输入并在屏幕上按字母顺序写入字符串顺序。你能帮我么?C-按字母顺序从标准输入排序数组
下面是程序:
#include <stdio.h>
#include <string.h>
int main (int argc, char *argv[])
{
char tabela[100][50];
int i=0;
int j,k;
char string[50];
char temp[50];
while(fgets(string,sizeof(string), stdin) != NULL)
{j=0;
while(j<strlen(string)){
tabela[i][j]=string[j++];
}
i++;
}
for(j=0; j < i ; j++){
for(k=j+1; k< i; k++)
{
if(strcmp(tabela[j],tabela[k]) > 0)
{
strcpy(temp,tabela[j]);
strcpy(tabela[j],tabela[j]);
strcpy(tabela[k],temp);
}
}
}
for (j = 0; j <i; j++){
printf("%s\n", tabela[j]);
}
// sort(tabela,i);
/* for(k = 0; k <=i;k++){
printf("\n");
for(j = 0; j <=i;j++) {
printf("%c", tabela[j][k]);
} //for */
/*
}//for */
return 0;
}//main
由于
一个机会是,通过选择排序来运行:
/* selection sort */
void sort(char **a, int n) {
int min, i, j;
char t[50];
for (i = 0; i < n; i++)
{
min = i;
for (j = i+1; j < n; j++)
{
if (strcmp(a[j],a[min]) < 0) min = j;
}
strcpy(t,a[min]);
strcpy(a[min],a[i]);
strcpy(a[i],t);
}
}
C/C++提供了一种用于在STDLIB排序的库。 h叫做“qsort”(快速排序)here
如果你需要一个例子le:
基本上,您需要首先包含必需的库“stdlib.h”和“string.h”,然后您需要定义一个比较函数。
int cmp(const void* a, const void* b)
{
int arg0 = *(char*) a, arg1 = *(char*)b;
return arg0-arg1;
}
假设你有长度的字符数组100
char example[100] = "adfasdfasdfsdasdfasdfafhtyjytjukvr";
然后调用函数的qsort这样的:
qsort(example,strlen(example),sizeof(char),cmp);
你去那里:)
或者,在C++中,还有另一种内置的排序功能std::sort()
和std::stable_sort()
可以在标题<algorithm>
中找到,它不仅可以用于char数组,还可以用于其他C++容器。你可以这样调用它:
std::sort(example,example+strlen(example));
延伸阅读:
我想这是在写作练习排序的代码,所以(以避免为你做功课)我会坚持一般的建议,基于排序练习和实际情况我已经写了。
在控制台输入期间对插入排序进行排序以进行插入排序 - 也就是说,排序是在列表输入时完成的,因此对于每个条目按ENTER后“非常短的时间”完全排序(理想情况下,用户不能在下一个输入提示出现之前告诉任何事情)。使用大型列表元素进行排序可能非常耗时,因此通常使用标签排序(在对标签进行排序而不是实际列表元素的情况下),但不太可能从手动输入中获得该级别的元素大小。一个很长的列表可能会给出类似的问题(取决于搜索算法的效率),但同样,这是一个受入口方法限制的问题。
由于列表限制(通过数组声明)为100个不超过50个字符长的元素,如果您需要使用简单的直通测试和批量下移元素,用户永远不会注意到延迟在新元素之后(在现代计算机上,即使在解释语言中,插入后的排序步骤也不会超过几毫秒的执行时间),但是(假设你正在学习一些稍后将用于较大程序的东西和数据集),使用二叉树搜索和链表更有效率;如果您只需查看其中的一小部分,并且永不需要移动它们中的任何一个,但只能在标记数组中移动整数,那么您可以获得每千字节长度的数千个元素的列表的插入时间。