问题描述:在键盘上输入N个数,试编写程序使该数组中的元素按照从小到大的次序排列。
1.冒泡排序
冒泡排序的过程如下:
(1)比较第一个数与第二个数,若为逆序a[0]>a[1],则交换;然后比较第二个数与第三个数,依次类推,直到第n-1个数和第n个数比较为止———第一趟冒泡排序;最终,最大的数被放在最后一个元素的位置上。
(2)对前n-1个数进行第二趟排序,最终使次大的数被放在第n-1个元素位置上。
(3)重复上述过程,共经过n-1次冒泡排序后结束。
示例代码如下:
#include <stdio.h>
#define N 10
int main()
{
int a[N];
int i,j,k;
printf("请输入%d个数:\n",N);
for(i = 0; i < N; i++){
scanf("%d",&a[i]);
}
for(i = 0; i < N-1; i++){
for(j = 0; j < N-1-i; j++){
if(a[j] > a[j+1]){
k = a[j];
a[j] = a[j+1];
a[j+1] = k;
}
}
}
printf("排序后:\n");
for(i = 0; i < N; i++){
printf("%d ",a[i]);
}
puts("");
return 0;
}
2.选择排序
选择排序过程如下:
(1)首先通过n-1次比较,从n个数中找出最小的,将它与第一个数交换——第一次选择排序,结果最小的数被放在第一个元素位置上。
(2)再通过n-2次比较,从剩余n-1个数中找出次小的数,将它与第二个数交换——第二次选择排序。
(3)重复上述过程,共经过n-1次排序后,排序结束。
示例代码如下:
#include <stdio.h>
#define N 10
int main()
{
int a[N];
int i,j,k,l;
printf("请输入%d个数:\n",N);
for(i = 0; i < N; i++){
scanf("%d",&a[i]);
}
for(i = 0; i < N-1; i++){
r = i;
for(j = i+1; j < N; j++){
if(a[j] < a[r]){
r = j;
}
}
if(r != i){
t = a[r];
a[r] = a[i];
a[i] = t;
}
}
printf("排序后:\n");
for(i = 0; i < N; i++){
printf("%d ",a[i]);
}
return 0;
}