直接插入排序算法
- 数组数据,分两部分,第一部分是已经排好序的,第二部分是未排序的部分。
- 逐个的将未排序的部分,插入至排好序的部分。
图示
运行结果
附上代码
#include <stdio.h>
#include <stdlib.h>
// 展示每次 排序的结果
void show_list(int arr[], int length, int index)
{
int i;
printf("插入位置:%d\n", index);
for (i = 0; i <= index; i++)
{
printf("%d", arr[i]);
}
printf("|");
for (i; i < length; i++)
{
printf("%d", arr[i]);
}
printf("\n");
}
// 直接插入
void insert_list(int arr[],int length)
{
for (int i = 1; i < length; i++) // 一个值 默认是排好序的 所以从下标1 开始
{
int j;
// 若小的话,需要判断,挪动位置
// 若带插入的比排好序的都要大就跳过本轮循环
if (arr[i-1] > arr[i])
{
j = i - 1; // j 为 待比较的 数组下标
int x = arr[i]; // x 为带插入的值
while (j > -1 && x < arr[j]) // 从后向前 比较 x与当前位置的值
{
// 从尾巴往后挪动
arr[j+1] = arr[j];
j--;
}
j = j+1;
arr[j] = x; // j+1 为插入的位置
}
show_list(arr, length, i);
}
}
int main()
{
int arr[10] = {1,9,2,8,3,7,4,6,5,0};
insert_list(arr, 10);
return 0;
}