直接插入排序。
直接插入排序是所有排序中最简单的一种排序。在处理大数据量或者待排序列太无序的时候效率就变很低。
但是在待排序记录较少时直接插入排序凭借其简单易实现的优势又成功逆袭,威风八面。
直接插入排序的基本思想是将数组分为有序区和无序区,将无序区的元素依次和有序区的元素进行比较,然后插入到首个比其值小的元素后面。
为防止数组下标越界 常将数组首元素设为哨兵。
下面就是这“欺短怕长”的直接插入排序的一种数组索引实现方法。
#include <stdio.h>
#define MAX 11
void Insert_Sort (int a[],int num); //声明函数,形式参量为数组和元素个数。
int main (void)
{
int i;
int Array [MAX] = {0}; //初始化数组。
puts ("Please enter 10 numbers:\n");
for (i = 1; i < MAX;i++)
{
scanf ("%d",&Array[i]); // 从a[1] 开始赋值。
}
Insert_Sort (Array,MAX); //调用函数。
for (i = 1;i < MAX;i++)
{
printf ("%d\n",Array[i]); // 打印。
}
return 0;
}
void Insert_Sort (int a[],int num)
{
int i,j; //声明数组的两个下标。
for (i = 2;i < num;i++) // 首先a[1]为有序区。所以从a[2]开始比较。
{
a[0] = a[i]; //将待排序的元素的值赋给哨兵。
for (j = i-1;a[0] < a[j];j--) // 从待排元素的前一个元素开始往前比较。
{
a[j+1] = a[j]; //依次将大于a[0]的元素向后移。
}
a[j+1] = a[0]; //把a[0]插入到a[j]的后一个位置。
}
}