直接插入排序:
时间复杂度:O(n^2)
一步一步记录自己成长的点滴,欢迎大家的建议。
//插入排序算法,以数组为实例,主要先理解算法
#include <stdio.h>
#define MAX 11
void InsertSort(int arr[])
{
int i,j;
for(i = 2; i < MAX; i++) //将arr[0]的位置空出来 ,专门用来存放用来比较的数
{
arr[0] = arr[i]; //将arr[i] 的值赋给 arr[0] ;以arr[i] 为中心将数组分成左右两个序列,左边为有序
j = i - 1; //arr[j]变成arr[i] 左边序列的最后一个数
while(arr[0] <= arr[j]) //将arr[0] 与arr[j]进行比较
{
arr[j+1] = arr[j]; //若是将arr[j]赋给原来的arr[i]
j--; //再与前面一个比较
}
arr[j+1] = arr[0]; //当arr[j]比arr[0] 小,将arr[0 ]赋给arr[j+1],这个空位
}
}
int main()
{
int i;
int arr[MAX] = {0, 12, 45, 23, 45, 56, 74, 78, 89, 45, 56};
InsertSort(arr);
for(i = 1; i < MAX; i++) //从arr[1] 开始输出,原来的arr[0]为测试的
printf("%d ", arr[i]);
printf("\n");
return 0;
}