直接插入排序:
每次從無序表(原數組)中取出下一個元素,把它插入到有序表的合適位置,使有序表仍然有序。
具體方法是第一趟比較前兩個數,然後把第二個數按大小插入到有序表中; 第二趟把第三個數據與前兩個數從前向後比較,把第三個數按大小插入到有序表中;推而廣之,進行了(n-1)趟掃描以後就完成了整個排序過程
它是由兩層嵌套循環組成的,外層循環標識並決定待比較的數值,內層循環爲待比較數值確定其最終位置。當前一數值比待比較數值大的情況下繼續循環比較,直到找到比待比較數值小的並將待比較數值置入其後一位置,結束該次循環。
#include <stdio.h>
void insort (int s[],int n)//自定義排序函數 insort
{
int i,j;
for (i=2;i<=n;i++)
{
s[0]=s[i];//s[0] 做監視哨 每次 比較 爲其賦值
j=i-1; //建立 循環變量i的副本 從右往左比較
while (s[0] < s[j])
{
s[j+1]=s[j];
j--;
}
s[j+1]=s[0];//在 確定好的位置 上插入 s[i]
}
}
void main()
{
int a[11];
int i;
printf("請輸入 10 個數據:");
for (i=0;i<10;i++)
scanf("%d",&a[i]);
printf("原始順序是: ");
for (i=0;i<10;i++)
printf("%3d",a[i]);
insort(a,10);//調用 自定義函數 insort()
printf("\n插入數據排序後的順序是:");
for (i=0;i<10;i++)
printf("%3d",a[i]);
printf("\n");
}