int
*zixiesort
(int
*array,
int n)}if
(flag)
array[k]
= tem;
flag =0;
}}return array;
}
int
*sort
(int
*array,
int n)
//找到了標記位並空餘出來
array[j]
= tmp;
//插入tmp
}return array;
}
主函式:int
main()
;printf
("亂序陣列:\n");
printf
("2,4,3,1,7,6,5,8,9,0\n");
printf
("自寫版直接插入排序後:\n");
int*b =
zixiesort
(a,10);
for(
int i =
0; i <10;
++i)
printf
("\n精簡版直接插入排序後:\n");
b =sort
(a,10);
for(
int i =
0; i <10;
++i)
return0;
}
直接排序演算法思想:
將待排序陣列分成兩部分 ,一部分為有序數列,一部分為無序數列,每輪排序將無序數列的第乙個數a與有序數列中的所有數進行比較,找到合適位置插入(如果需要後移資料就後移,留出空位),將a插入到無序數列中。進行n-1輪比較插入,就可以將資料排好。
如無序陣列 2,4,3,1,7,6,5,8,9,0
公升序排序
第一輪 排序:一般將4作為無序數列第乙個數(4以及以後都屬無序列的資料),與有序數列中的2進行比較,比它大,已經是有序的了,不做插入動作。
第二輪 排序:將3作為無序數列第乙個數(此時無序數列就是3,1,7,6,5,8,9,0),與有序數列中的每乙個數比較(此時有序數列為2,4),插入到2與4之間,4需要向後移動乙個,覆蓋資料3,將3插入(覆蓋)到資料4原來的位置。
第三輪 排序:將1作為無序數列第乙個數(此時無序數列就是1,7,6,5,8,9,0),與有序數列中的每乙個數比較(此時有序數列為2,3,4),2,3,4一次向後移動一位,將1,插入到2原來的位置。
…第n-1輪:…
這樣就排好了資料。
時間複雜度:
簡單地說,因為每次無序數列的第乙個數都要與有序數列進行比較插入此動作時間複雜度約等於o(n),然後還要進行n-1輪排序,所以總的時間複雜度約為o(n*(n-1))----->o(n^2).
直接插入排序的c語言實現
直接插入排序即是在要排序的陣列中,假設前n 1 n 2 個數已經是排好序的,現在要把第n個數插入到前n個已經排好序的陣列中,使得這n個數也變成有序的,如此反覆迴圈,使得要排序的陣列中的最後乙個元素也排好序,我們可以先假設第乙個數是排好序的,然後第二個數和第乙個數進行比較,如果第二個數比第乙個數大,那...
直接插入排序 C語言
插入排序是最簡單的一種排序方法。它的基本操作就是將乙個記錄插入到已排好序的有序表中,從而得到乙個新的 記錄數增1的有序表。直接插入排序時,我們將第二個陣列元素作為插入數,第乙個數作為有序陣列。逐個比較兩者大小,最後將數插入到合適位置。實現 插入排序 void inse int data int t ...
C語言直接插入排序
直接插入排序 穩定演算法 的基本思想 從第乙個數開始,認定陣列的前i個數有序,依次遍歷陣列,把後面的資料插入到合適的位置,使陣列繼續保持有序。include void swap int a,int b 直接插入排序 公升序 void insertsort up int arr,int length ...