最好:本身有序,只考虑前一次,进行n-1次比较,0次移动 时间O(n).
最坏:数组逆序,每次都要和前面的全部比较移动 时间复杂度:O(n^2).
#include <stdio.h>
#include<stdlib.h>
void insertsort(int a[],int n);
void printarr(int a[],int n);
int main()
{
int arr[] = { 0, 22, 2, 33, 3, 1, 6, 5, 8, 9 };
int sizeofnum=sizeof(arr)/sizeof(int);
insertsort(arr,sizeofnum);
printarr(arr,sizeofnum);
return 0;
}
void insertsort(int a[],int n){
int j;
for(int i=1;i<n;i++){
int t=a[i];//i之前的元素为已排好的有序表
for (j=i-1;t<a[j]&&j>=0;j--){// 要a[i-1]为有序表最后一项,要插入到有序表中,所以不能令j=i;
a[j+1]=a[j];
}
a[j+1]=t;//插入到正确位置
}
}
void printarr(int a[],int n){
for(int i=0;i<n;i++){
printf("%d ",a[i]);
}
printf("\n");//养成好习惯
}