1. 分析
/*1. 直接插入排序(InsertSort)
#时间复杂度:
最好时间复杂度:O(n)
平均时间复杂度:O(n^2)
最坏时间复杂度:O(n^2)
#空间复杂度:O(1)
#应用场合:1.元素特别少;2.数组基本有序;
#分析: 1. 带排序 数组分成两部分
2. 将无序数组的元素依次插入到有序数组中去
2.1 保存无序的第一个;
2.2 拿无序的第一个和有序的最后一个比较:
如果 小, 将有序元素依次向后移动到直到合适位置;
如果 大,比较停止;
2.3 处理下一个无序元素;
实现方法:循环嵌套
*/
2. 源码
void InsertSort(int *arr, int nLength)
{
if(arr == NULL || nLength <= 0)
{
printf("InsertSort:invalid input!\n");
return ;
}
int i,j;
int temp ;
for(i = 1 ; i < nLength-1; i++)
{
j = i-1; //有序数组的最后一个;
temp = arr[i];//无序数组第一个
//给temp元素找位置:找比temp小的元素;
while(temp < arr[j] && j>=0)
{
arr[j+1] = arr[j]; //移动元素,好让temp有地方放
j--;
}//temp >= arr[i]
//temp 放在找到元素后;
arr[j+1] = temp;
}
return;
}