算法实现:
insertsort.c:
#include <stdio.h>
void insertsort(int* arr,int len){
int i = 0,j = 0,k=0;
int tmp = 0;
for(i=1;i<len;i++){
tmp = arr[i];
j = i-1;
while(j>=0&&tmp<arr[j]){
arr[j+1]=arr[j];
j--;
}
arr[j+1]=tmp;
for(k=0;k<8;k++)
printf("%d\t",arr[k]);
printf("\n--------\n");
}
}
int main(){
int i = 0;
int arr[8]={6,1,3,5,2,4,8,7};
printf("pre:\n");
for(i=0;i<8;i++)
printf("%d\t",arr[i]);
printf("\n");
printf("\n");
insertsort(arr,8);
return 0;
}
gcc insertsort.c -omain
pre:
6 1 3 5 2 4 8 7
-
1 6 3 5 2 4 8 7
-----
1 3 6 5 2 4 8 7
---------
1 3 5 6 2 4 8 7
--------------
1 2 3 5 6 4 8 7
------------------
1 2 3 4 5 6 8 7
-----------------------
1 2 3 4 5 6 8 7
---------------------------
1 2 3 4 5 6 7 8
-------------------------------
算法思想:保证被比较值的左侧为有序,在将被比较的值插入到这个有序的队列里。
例子分析:
1.首先arr[0]=6,arr[1]=1,所以需要交换位置,交换之后,arr[0]~arr[1]为有序。
2.取arr[2],此时arr[0]~arr[1]为有序,将arr[2]插到这个有序的数组里。保证插入之后,arr[0]~arr[2]为有序。结果为1,3,6。
3.arr[0]~arr[2] : 1,3,6。此时应该取arr[3],向arr[0]~arr[2]里插。依次类推,直至数组最后一个元素插入到左侧有序数组内。
这个算法是冒泡算法的改进版本。