一、冒泡排序
从第一个数值开始,每相邻的两个数值排序与我们希望的排序位置不同时,将两个数的位置进行交换。如果一致,则不交换。每排一次会把最大或最小的数放到最后,重复上述操作,直到排序完成。
3,2,5,8,1,9,7,4,0,6
第一轮排序:2351874069
第二轮排序:2315740689
第三轮排序:2135406789
第四轮排序:1234056789
第五轮排序:1230456789
第六轮排序:1203456789
第七轮排序:1023456789
第八轮排序:0123456789
……
代码如下:
#include<stdio.h>
int main(){
int a[10]={3,2,5,8,1,9,7,4,0,6};
// 外层循环代表循环次数(n-1)
for (int i = 0; i < 10-1; i++){
// 内层循环代表个数(n-1-i)
for (int j = 0; j < 10-1-i; j++){
if(a[j]>a[j+1]){
int t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
// 打印结果
for (int i = 0; i <= 9; i++) printf("%d",a[i]);
return 0;
}
输出结果:0123456789
二、选择排序
从第一个数开始,控制变量法,第一个数依次与后面每一个数比较,当两个数与我们希望的排序位置不同时,做个标记(与交换法的差距也就是在这里),第一轮循环完后将两个数的位置进行交换。全部比较完后最小的数到了最前面,继续从第二个数重复上述操作,直到排序完成。
代码如下:
#include<stdio.h>
int main(){
int a[10]={3,2,5,8,1,9,7,4,0,6};
int k;
// 外层循环代表循环次数(n-1)
for (int i = 0; i < 10-1; i++){
//用k记录需要交换的值
k=i;
// 内层循环代表第j个与第i个比
for (int j = i+1; j <= 10; j++){
if(a[k]>a[j]){
k=j;
}
}
if (k!=i)
{
int t=a[k];
a[k]=a[i];
a[i]=t;
}
}
// 打印结果
for (int i = 0; i <= 9; i++) printf("%d",a[i]);
return 0;
}
输出结果:0123456789
三、插入排序
从第一个数开始,视为一个数组,将 i 与前面数组里的数从后往前依次比较,当两个数与我们希望的排序位置不同时,插入该数。
第一轮排序:3258197406
第二轮排序:2358197406
第三轮排序:2358197406
第四轮排序:2358197406
第五轮排序:1235897406
第六轮排序:1235897406
第七轮排序:1235789406
第八轮排序:1234578906
第九轮排序:0123457896
第十轮排序:0123456789
……
#include<stdio.h>
int main(){
int a[10]={3,2,5,8,1,9,7,4,0,6};
// 循环数组a
for (int i = 0; i < 10; i++){
// 循环前面的被插入数组
for (int j = i; j > 0; j--){
if (a[j] < a[j - 1])
{
int t = a[j];
a[j] = a[j - 1];
a[j - 1] = t;
}
}
}
// 打印结果
for (int i = 0; i <= 9; i++) printf("%d",a[i]);
return 0;
}
输出结果:0123456789
四、交换排序
从第一个数开始,控制变量法,第一个数依次与后面每一个数比较,当两个数与我们希望的排序位置不同时,将两个数的位置进行交换。全部比较完后最小的数到了最前面,继续从第二个数重复上述操作,直到排序完成。
第一轮排序:0358297416
第二轮排序:0158397426
第三轮排序:0128597436
第四轮排序:0123897546
第五轮排序:0123498756
第六轮排序:0123459876
第七轮排序:0123456987
第八轮排序:0123456798
第九轮排序:0123456789
……
代码如下:
#include<stdio.h>
int main(){
int a[10]={3,2,5,8,1,9,7,4,0,6};
// 外层循环代表循环次数(n-1)
for (int i = 0; i < 10-1; i++){
// 内层循环代表第j个与第i个比
for (int j = i+1; j <= 10; j++){
if(a[i]>a[j]){
int t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
// 打印结果
for (int i = 0; i <= 9; i++) printf("%d",a[i]);
return 0;
}
输出结果:0123456789