直接插入排序是穩定的排序方法。
基本思路:依次把待排序的記錄逐一按其關鍵字的大小插入到一個已經排好序的有序序列中去,直到所有的記錄插完位置,得到一個新的有序序列。
算法的思路:
1.設置監視哨x,將待排序的數據賦給x,對於整個數組的排序而言,一般選第二個數據;
2.設置開始查找的位置j = i - 1;
3.在數組中先前掃描,掃描中將第j個記錄後移,並且j--,爲下一次循環做準備,直到x>=buf[j]爲止;
4.將x插入在j+1的位置。
#include<stdio.h>
#define Type char
void zj_insert(Type *buf, int n)
{
int i,j;
Type x ;
for(i = 1; i < n; i++) //從數組中第二個數開始排序,進行n-1趟排序
{
x = buf[i]; //設置監視哨,把待插入的數據賦值給它
j = i - 1; //從i-1開始往前比較
while(x < buf[j]) //確定插入位置。直到x>=buf[j]爲止。
{
buf[j + 1] = buf[j];//如果x < buf[j],將第j個元素往後移,
j--; //並且j--爲下一次比較做準備。
}
buf[j + 1] = x; //插入待排序的數
}
}
int main()
{
int i;
Type num[11] = "asdfghjkloq"; //{1,11,23,32,24,3,5,8,10,16,22}
printf("Original array:");
for(i = 0; i < 11; i++)
printf("%c ", num[i]); //注意輸出格式的替換
printf("\n");
zj_insert(num, 11);
printf("Sorted array:");
for(i = 0; i < 11; i++)
printf("%c ", num[i]); //注意輸出格式的替換
printf("\n");
return 0;
}