冒泡:
#include <stdio.h>
void printArray(int ary[], int len)
{
int i = 0;
for(i = 0; i < len; i++){
printf("%-3d", ary[i]);
}
printf("\n");
}
void bubbleSort(int ary[], int len)
{
//排序过程
int i = 0;
int j = 0;
int tmp = 0;
//如果一个序列有N个数据,那么需要N-1趟才能将序列排序完成
for(i = 0; i < len - 1; i++){
//每一次内循环结束,将待排序列中的最大数,交换到该序列的尾部
for(j = 0; j < len - 1 - i;j++){
if(ary[j] > ary[j + 1]){
//交换两个数据
tmp = ary[j];
ary[j] = ary[j + 1];
ary[j + 1] = tmp;
}
}
printf("第%d趟结束后的排序结果:", i + 1);
printArray(ary, 10);
}
}
int main(int argc, char **argv)
{
int ary[10] = {3,10,67,9,0,6,8,9,5,100};
int len = sizeof(ary) / sizeof(int);
printf("排序前的序列:");
printArray(ary, len);
//排序
bubbleSort(ary, len);
//排序后的序列
printf("排序后的序列:");
printArray(ary, len);
return 0;
}
选择:
#include <stdio.h>
void printArray(int ary[], int len)
{
int i = 0;
for(i = 0; i < len; i++){
printf("%-3d", ary[i]);
}
printf("\n");
}
void selectSort(int ary[], int len)
{
int i = 0;
int j = 0;
int tmp = 0;
int pos = 0; //记录每一趟带排序列最小值的下标
for(i = 0; i < len - 1; i++){
pos = i;
//当内循环结束,找到待排序列中最小值的下标
for(j = i + 1; j < len; j++){
if(ary[pos] > ary[j]){
pos = j; //更新最小值下标
}
}
if(pos != i){
tmp = ary[i];
ary[i] = ary[pos];
ary[pos] = tmp;
printf("第%d趟的排序结果:", i + 1);
printArray(ary, len);
}
}
/*
int i = 0;
int j = 0;
int tmp = 0;
//一个len个数的序列,需要len-1趟可以成为一个有序的序列,设置标记位
for(i = 0; i < len - 1; i++){
//每一此内循环结束,将最小数放到待排序列的首位
for(j = i + 1; j < len; j++){
if(ary[i] > ary[j]){
tmp = ary[i];
ary[i] = ary[j];
ary[j] = tmp;
}
}
printf("第%d趟的排序结果:", i + 1);
printArray(ary, len);
}
*/
}
int main(int argc, char **argv)
{
int ary[10] = {9,8,7,6,5,4,3,2,1,0};
int len = sizeof(ary) / sizeof(int);
printf("排序前的序列:");
printArray(ary, len);
//排序
selectSort(ary, len);
//排序后的序列
printf("排序后的序列:");
printArray(ary, len);
return 0;
}