C語言算法 直接插入排序

直接插入排序:
每次從無序表(原數組)中取出下一個元素,把它插入到有序表的合適位置,使有序表仍然有序。
具體方法是第一趟比較前兩個數,然後把第二個數按大小插入到有序表中; 第二趟把第三個數據與前兩個數從前向後比較,把第三個數按大小插入到有序表中;推而廣之,進行了(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"); 
}
發佈了34 篇原創文章 · 獲贊 2 · 訪問量 4198
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章