五十道程式設計小題目 --- 28 八大排序演算法 java 之 01直接插入排序
阿新 • • 發佈:2019-01-09
1.插入排序—直接插入排序(Straight Insertion Sort)
基本思想:
將一個記錄插入到已排序好的有序表中,從而得到一個新,記錄數增1的有序表。即:先將序列的第1個記錄看成是一個有序的子序列,然後從第2個記錄逐個進行插入,直至整個序列有序為止。
要點:設立哨兵,作為臨時儲存和判斷陣列邊界之用。
直接插入排序示例:
如果碰見一個和插入元素相等的,那麼插入元素把想插入的元素放在相等元素的後面。所以,相等元素的前後順序沒有改變,從原無序序列出去的順序就是排好序後的順序,所以插入排序是穩定的。
演算法的實現:
[java] view plain copy- publicclass StraihtInertionSort {
- //快速排序演算法
- publicstaticint[] sort(int[] arr){
- int n = arr.length;
- for(int i=0; i<n-1 ; i++){
- if(arr[i] > arr[i+1]){
- //交換
- int tmp = arr[i];
- arr[i] = arr[i+1];
-
arr[i+1
- int index = i; //由於上面的交換,arr[i] < arr[i+1]的 , 所以index儲存的是即將要與前面所有數比較的索引即監視哨
- int j=i-1;
- while( j>=0 && arr[j] > arr[index] ){
- //交換
- int tmp1 = arr[j];
-
arr[j] = arr[index];
- arr[index] = tmp1;
- index = j;
- j--;
- }
- }
- }
- return arr;
- }
- //列印陣列
- publicstaticvoid print(int[] arr){
- for(int i=0; i<arr.length ; i++){
- System.out.print(arr[i] + " ");
- }
- System.out.println();
- }
- publicstaticvoid main(String[] args) {
- int[] arr = {49,38,65,97,76,13,27,49};
- print(arr);
- print(sort(arr));
- }
- }
- 4938659776132749
- 1327384949657697
效率:
時間複雜度:O(n^2).