插入排序(insertion sort)
1、具体内容
1.1 插入排序原理
插入排序要解决的是一个已经有序的序列,再加入一个元素,组成的新序列仍保持有序的问题。
对一个我们未知它是否有序的序列进行插入排序,我们可以将第一个元素视为一个已经有序的序列,进行插入排序操作时,每次新增一个待插入元素,找到它的位置再继续,直至全部排序完。
1.2 分析
时间复杂度:
平均交换次数:n(n-1)/4
对于每一个新插入的元素,需要交换的概率为1/2,构成一个以0为首项,1/2为公差的等差数列。
空间复杂度:
不需要额外辅助存储空间
2、实现代码
#include <stdio.h>
#define ARR_LEN 255 /*数组容量*/
#define elemType int /*数据类型*/
/* elemType arr[]: 排序目标数组; int len: 元素个数 */
void insertSort (elemType arr[], int len)
{
elemType temp;
for(int i=1;i<len;i++)
{
for(int j=i;j>0&&arr[j]<arr[j-1];--j)
{
arr[j]^=arr[j-1];
arr[j-1]^=arr[j];
arr[j]^=arr[j-1];
}
}
}
int main ()
{
elemType arr[ARR_LEN] = {3,5,1,-7,4,9,-6,8,10,4};
int len = 10;
int i;
insertSort (arr, len);
for (i=0; i<len; i++)
printf ("%d\t", arr[i]);
printf("\n");
return 0;
}