1、冒泡排序法
定义一个整型数组num[10],随机初始化数组中元素值,然后利用冒泡法将数组中的元素值从小到大排序输出。
【分析】
基本思想是:每次将相邻两个数比较,将小的调到前面。
如果有n个数,则要进行 n - 1 趟比较。在第1趟中要进行 n - 1 次两两比较,在第 j 趟中要进行 n - j 次两两比较。
初始序列:{3 5 1 4 7 2 6 8 0 9}
第1趟:
第1次:3 5 1 4 7 2 6 8 0 9
第2次:3 1 5 4 7 2 6 8 0 9
第3次:3 1 4 5 7 2 6 8 0 9
第4次:3 1 4 5 7 2 6 8 0 9
第5次:3 1 4 5 2 7 6 8 0 9
第6次:3 1 4 5 2 6 7 8 0 9
第7次:3 1 4 5 2 6 7 8 0 9
第8次:3 1 4 5 2 6 7 0 89
第9次:3 1 4 5 2 6 7 0 8 9
第2趟:
第1次:1 3 4 5 2 6 7 0 8 9
第2次:1 3 4 5 2 6 7 0 8 9
……
第8次:1 3 4 2 5 6 0 7 8 9
……
第9趟:
……
【代码】
#include <stdio.h>
int main(void)
{
int num[10] = {};
int i = 0;
int j = 0;
int temp;
for(i = 0; i < 10; i++)
{
scanf("%d", &num[i]);
}
for(i = 0; i < 9; i++)
{
for(j = 0; j < 9 - i; j++)
{
if(num[j] > num[j + 1])
{
temp = num[j];
num[j] = num[j + 1];
num[j + 1] = temp;
}
}
}
for(i = 0; i < 10; i++)
{
printf("%d\n", num[i]);
}
return 0;
}
2、选择排序法
定义一个整型数组num[10],随机初始化数组中元素值,然后利用选择法将数组中的元素值从小到大排序输出。
【分析】
第一趟:在待排序记录r[1]~r[n]中选出最小记录,将它与r[1]交换;
第二趟:在待排序记录r[2]~r[n]中选出最小记录,将它与r[2]交换;
……以此类推
第 i 趟:在待排序记录r[i]~r[n]中选出最小记录,将它与r[i]交换;
使有序序列不断增长指导全部排序完毕。
初始序列:{49 27 65 97 76 12 38}
第1趟:12与49交换:12 {27 65 97 76 49 38}
第2趟:27不动: 12 27 {65 97 76 49 38}
第3趟:65与38交换:12 27 38 {97 76 49 65}
第4趟:97与49交换:12 27 38 49 {76 97 65}
第5趟:76与65交换:12 37 38 49 65 {97 76}
第6趟:97与76交换:12 37 38 49 65 76 97
完成
【代码】
#include <stdio.h>
int main(void)
{
int num[10] = {};
int i = 0;
int j = 0;
int temp;
int index;
for(i = 0; i < 10; i++)
{
scanf("%d", &num[i]);
}
for(i = 0; i < 9; i++)
{
index = i;
for(j = i + 1; j < 10; j++)
{
if(num[j] < num[index])
{
index = j;
}
}
if(index != i)
{
temp = num[index];
num[index] = num[i];
num[i] = temp;
}
}
for(i = 0; i < 10; i++)
{
printf("%d\n", num[i]);
}
return 0;
}