1.直接插入排序算法思想
- 直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一 个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。
2.简单总结直接选择排序的基本思路
- 当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]**已经排好序,**此时用array[i]的排序码与 array[i-1],array[i-2],…的排序码顺序进行比较,找到插入位置即将array[i]插入,原来位置上的元素顺序后移。
- 直接插入排序图解分析
- 以升序为例基本代码实现如下:
void Insert_Sort(int* arr, int n)
{
int i = 0;
for (i = 0; i < n - 1; i++)
{
if (arr[i + 1] < arr[i])//找到比前一个数相比较小的当前数
{
int tmp = arr[i + 1];//先把当前数保存下来
int j = i;//用J来记录当前数前一个数的下标
for (j; tmp < arr[j] && j >= 0; j--)
{
if (tmp < arr[j])
{
arr[j + 1] = arr[j];
}
}
arr[j + 1] = tmp;
}
}
}
void InterSort_test()
{
int arr[] = { 4, 3, 2, 8, 0, 9, 7, 8, 5, 4, 8, 9, 5, 6, 4 };
int n = sizeof(arr) / sizeof(int);
Insert_Sort(arr, n);
printf("直接插入排序结果:");
for (int i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int main()
{
InterSort_test();
system("pause");
return 0;
}
3.直接选择排序的特性总结
-
时间复杂度分析
①:最优情况下时间复杂度:O( n ),最好情况(原本就是有序的)
-
比较次数:Cmin=n-1;
-
移动次数:Mmin=0
②:最差情况下时间复杂度:O( n^2 ),最差情况(逆序)
-
比较次数:Cmax=1+2+3+4+……+n-1=(n-1)n/2
-
移动次数:Mmax=1+2+3+……+n-1=(n-1)n/2
-
-
空间复杂度分析
直接插入排序空间复杂度为O( 1 )
-
稳定性分析
直接插入排序是稳定的排序