一 类插入排序法(时间复杂度O(n))
从头开始遍历,依次放在前面的是当前剩余所有未排序数中最小的
#include<stdio.h>
int main(){
int a[10],i,j;
printf("请输入要排序的数组:\n");
for(i=0;i<10;i++){
scanf("%d",&a[i]);
}
int min,t;
for(i=0;i<10;i++){
min=i;//用下标表示更省时
for(j=i+1;j<10;j++){//依次使当前变为剩下中最小的
if(a[j]<a[min]){min=j;}
}
if(min!=i){t=a[i];a[i]=a[min];a[min]=t;}//将当前最小交换到前面
}
printf("输出排序后的数组:\n");
for(i=0;i<10;i++){
printf("%4d",a[i]);
}
}
二 插入排序(时间复杂度O(n))
也是从头开始遍历,每遍历到的数要在它前面的序列中找到正确的位置
#include<stdio.h>
int main(){
int a[10],i,j;
printf("请输入要排序的数组:\n");
for(i=0;i<10;i++){
scanf("%d",&a[i]);
}
for(i=0;i<10;i++){
int b,c,t;
b=i;c=a[i];
for(j=i-1;j>=0;j--){//类插法往后,插入法往前
if(a[b]<a[j]){
t=a[j];a[j]=c;a[b]=t;b=j;
}}}
printf("输出排序后的数组:\n");
for(i=0;i<10;i++){
printf("%4d",a[i]);
}
}