(一)问题描述:
请分别使用选择排序,冒泡排序,插入排序对一个整数数组进行排序
三种排序方式伪代码定义如下:
(二)程序源码:
1)选择排序:
/*本函数以1000长度的数组为例,将其从小到大排序*/
void selection_sort(int num[1000])
{
int i, j, k; //建立三个变量使用
for(i = 0; i < 998; i++){ //i 从第一个开始遍历数直到倒数第二个
k = i; //k 是用来记录在 i 之后最小的一个数
for(j = 1; j < 999; j++){
if(num[j] < num[k]){ //如果num[j]的值小于现在记录的最小值
k = j; //就将 j 赋给 k
}
}
if(k != i){ //若是后面有更小的数,就将其赋给num[i]
num[i] = num[k];
}
}
}
2)冒泡排序:
/*本函数以1000长度的数组为例,将其从小到大排序*/
void Bubble_sort(int num[1000])
{
int i, j, temp, judge; //建立需要使用的变量
for(i = 0; i < 998; i++){ //i 从第一个开始遍历数直到倒数第二个
judge = 1; //judge等于1表示真,0表示假
for(j = 1; j < 999; j++){
if(num[j] > num[j + 1]){ //如果发现由相邻两个数前面一个大于后面一个就将两者互换
temp = num[j];
num[j] = num[j + 1];
num[j + 1] = temp;
judge = 0; //假如互换过,judge就变为0
}
}
if(judge) break; //假如judge没有变为0,则说明不再需要调整了
}
}
3)插入排序:
/*本函数以1000长度的数组为例,将其从小到大排序*/
void Insert_sort(int num[1000])
{
int i, j, key; //建立需要使用的变量
for(i = 1; i < 999; i++){ //i 从第一个开始遍历数直到最后一个
key = num[i]; //将num[i]保存在key中
j = i - 1; //j 从 i 的前一个开始遍历
while(j >= 0 && num[j] > key){ //如果num[j]大于key,则为了将key插入到合适的位置,
num[j + 1] = num[j]; //需要将num[j]向后挪一位
j -= 1;
}
num[j + 1] = key; //最后在停止的位置插入key
}
}
(三)总结
这三种排序算法是C语言中比较常见的三种排法,我们一定要牢记甚至熟背,做到不在这上面浪费时间。但排序的算法还有很多很多种,可以慢慢探索。