插入排序的规则是:
第一轮开始时默认序列中第一个数据是有序的,之后各个数据以此为基准,
判断是插入在此数据的前面还是后面,之后的数据依次向后移动,腾出位置,让数据插入,
以此类推,直到整个序列有序为止。每比较一次,
如果满足条件(升序:前面一个数比后面需要插入的数大),就直接交换。
特点:对基本有序的序列插入排序速度相对而言比较快,插入排序的优势越明显,数据量越多,劣势也越明显 。
代码示例:
void InsertSort(int x[], int n)//插入排序
{
int i, j, k;
for (i = 1; i < n; i++)
{
for (j = i; j >= 0; j--)
if (x[j - 1]>x[j])
{
k = x[j - 1];
x[j - 1] = x[j];
x[j] = k;
}
}
for (i = 0; i < n;i++)
printf("%d\t",x[i]);
}
main(){
//定义无序数组
srand((unsigned)time(NULL));
int arr[10];
for (int i = 0; i < 10; i++)
{
arr[i] = rand() % 100;
printf("arr[%d]:%d\n", i, arr[i]);
}
InsertSort(arr,10);
printf("-------------------------------\n");
printf("交换后:\n");
for (int i = 0; i < 10; i++)
{
printf("arr[%d]:%d\n", i, arr[i]);
}
}
优化后的插入排序:
void insert_sort(int arr[],int len)//优化后的插入排序
int tempVal;
int j;
for (int i = 1; i < len; ++i)//确定循环次数,改变i是为了把i直接当成下标
{
tempVal = arr[i];//把待插入的数据另行保存一份
j = i - 1;
while (j >= 0 && tempVal < arr[j])
{
arr[j + 1] = arr[j];
--j;
}