插入排序
应用场景
- 元素特别少的时候
- 待排序元素的开始距离其排好序下标不远的时候
核心思想
将待排序数据分成两部分,一部分有序,一部分无序,将无序部分依次插入到有序部分
代码
void InsertSort(int arr[],int nlength)
{
if(arr == NULL || nlength <= 0) return;
//默认第一个元素有序
//没有交换只有放入 有倒叙遍历有序数组的过程
int i;
int j;
int Temp;
// 趟遍历无序元素(默认有序数组为空-1位置)
for(i = 0 ; i < nlength ; i ++ )
{
Temp = arr[i]; // 保存无序数组第一个元素
// 倒序遍历有序数组 无序插入有序
for(j = i ; j >= 1 ; j--)
{
if(Temp > arr[j-1])
{
//插入到有序数
arr[j] = Temp;
break;
}
arr[j] = arr[j-1];
}
if(j == 0)
{
arr[j] = Temp;
}
}
}
void InsertSort1(int arr[],int nlength)
{
if(arr == NULL || nlength <= 0) return;
int i; //无序元素
int j; //有序数组
int Temp;
for(i = 1; i < nlength ; i ++ )
{
j = i - 1; //标记有序数组最后一个
Temp = arr[i];//记录无序的第一个
//到序遍历有序数组
while(Temp < arr[j] && j>= 0)
{
arr[j+1] = arr[j];
j--; // 标记向前移动
}
//插入
arr[j+1] = Temp;
}
}