您的位置:首页 > 其它

排序算法实践

2015-06-27 11:08 369 查看
[align=left]输入有两行,第一行是一个正整数,表示有n个同学参与调查(n <= 100)。第二行有n个用空格隔开的正整数,为每本图书的ISBN号(假设图书的isbn号在 1-1000之间);[/align]
[align=left]输出有两行,第一行是一个正整数k,表示需要买多少本书。第二行是k个用空格隔开的正整数,为从小到大已排序的需要购买的图书的ISBN号。[/align]

[align=left]先排序,再去重。或者 先去重,再排序。[/align]

[align=left]第一种方法,桶排序[/align]
#include <stdio.h>

int main()
{
int isbn[1001];
int num, k = 0;
int a;
int i;
/*数组必须进行初始化*/
for(i = 0; i < 1001; i++)
isbn[i] = 0;

printf("输入要调查的学生个数 n = ");
scanf("%d", &num);

printf("输入ISBN号:");
for (i = 0; i < num; i++)
{
scanf("%d", &a);
if (isbn[a-1] == 0)
{
k++;
isbn[a-1] = 1;
}
}
printf("需要购买 %d 本书\n", k);

printf("输出ISBN号:");
for (i = 0; i < 1001; i++)
{
if (isbn[i] == 1)
printf("%d ", i + 1);
}

getchar();
getchar();
return 0;
}


第二种:冒泡排序
#include <stdio.h>

int main()
{
int isbn[1001];
int num, k = 0;
int temp;
int i, j;
/*数组必须进行初始化*/
for(i = 0; i < 1001; i++)
isbn[i] = 0;

printf("输入要调查的学生个数 n = ");
scanf("%d", &num);

printf("输入ISBN号:");
for (i = 0; i < num; i++)
{
scanf("%d", &isbn[i]);
}
/*冒泡排序, 从小到大*/
for (i = 0; i < num -1; i++)
for (j = 0; j < num - 1 - i; j++)
{
if (isbn[j] > isbn[j + 1])
{
temp = isbn[j];
isbn[j] = isbn[j + 1];
isbn[j + 1] = temp;
}
}

printf("输出ISBN号:");
for (i = 0; i < num; i++)
{
if (isbn[i] != isbn[i + 1])
{
printf("%d ", isbn[i]);
k++;
}
}
printf("\n需要购买 %d 本书\n", k);

getchar();
getchar();
return 0;
}


[align=left]第三种:快速排序[/align]

#include <stdio.h>
int isbn[1000];
int num;

/*从小到大排序*/
void QuickSort(int left, int right)
{
int i, j;
int temp;
int a;

if (left > right)
return;
temp = isbn[left];
i = left;
j = right;

while (i != j)
{
while (isbn[j] >= temp && i < j)
j--;
while (isbn[i] <= temp && i < j)
i++;

//运行到这行的时候已经找到了
if (i < j)
{
a = isbn[i];
isbn[i] = isbn[j];
isbn[j] = a;
}
}

isbn[left] = isbn[i];
isbn[i] = temp;

QuickSort(left, i-1);
QuickSort(i + 1, right);
}

int main()
{
int i, k = 0;

printf("输入调查学生的个数 n = ");
scanf("%d", &num);

printf( "输入ISBN号:" );
for (i = 0; i < num; i++)
scanf("%d", &isbn[i]);

QuickSort(0, num-1);

printf( "输出ISBN号:" );
for (i = 0; i < num; i++)
{
if (isbn[i] != isbn[i + 1])
{
printf( "%d " , isbn[i]);
k++;
}
}
printf( "\n需要购买 %d 本书\n" , k);

getchar();
getchar();

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: