#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<stdlib.h>
//时间复杂度最坏为O(N*N),此时待排序序列为逆序;最好情况为O(N),此时排列序列为升序,或者说接近升序。、
//空间复杂度O(1),没有使用额外空间;
void Insertion_Sort(int* arr,int n)
{
//i最大为倒数第二位,这时只有一个数据需要插入,那就是最后一个数据。
for (int i=0;i<n-1;++i)
{
//有序序列最后一个元素的下标
int end_index = i;
//即将插入序列的元素
int tmp = arr[end_index+1];
while(end_index>=0)
{
if (tmp<arr[end_index])
{
//arr[end_index]往后移一位,相当于这个位置空出来了。
arr[end_index+1] = arr[end_index];
//继续往前走,找小于或等于tmp的值。
end_index--;
}
else
{
break;
}
}
//找到属于tmp的位置了
arr[end_index+1] = tmp;
}
}
int main()
{
int array[10] = {10,9,8,7,6,5,4,3,2,1};
Insertion_Sort(array,10);
for (auto& e : array)
{
std::cout << e << std::endl;
}
return 0;
}
【数据结构】插入排序
最新推荐文章于 2025-04-11 20:10:16 发布