相信大家對直接插入排序都不陌生,通俗來說就是每次取要排序陣列內的第i個數,在前i-1個數中,進行比較,找到正確的位置,插入即可。
**:
func insert(nums int,n int) int
nums[end+1]=num
} return nums
}
分析:對於直接插入排序,平均時間複雜為o(n^2),空間複雜度為o(1),可見時間複雜度是比較高的,這是因為,要找到這個數的位置,就需要乙個乙個比較,接下來我們稍微優化一下,減少一下比較次數,可能有的同學想到了,沒錯就是用二分查詢
前面不變,只是在查詢位置插入的時候,用二分查詢就好
**:
func twoinsert(nums int,n int) int
nums[first]=temp
} return nums
}
希爾排序也是插入排序,他的改進在於,每次給定乙個key值,相鄰的key個元素為一組,進行插入排序,然後key–,直到key=0,排序結束
**:
func shellsort(nums int,n int)int
nums[end+gap]=key
} gap--
} return nums
}
這裡我們是給定了乙個key值為3.我看過乙個,經過多次實驗,發現key=size key=key/3+1,這種情況下效率較高,如果你是大資料集時的時候,可以考慮一下,如果資料比較少,感覺差距不會很大 C語言實現插入排序
插入排序 我在學習一些簡單的演算法,我用文字記錄我的進步。插入排序 其實就是在待排序列中找到,沒有排序好的元素,插入的適當的位置,本文以公升序為例,簡單的講解一下。直接看下面的 include stdio.h include stdlib.h include string.h void swap i...
C語言實現插入排序
插入排序是排序演算法的一種,它不改變原有的序列 陣列 而是建立乙個新的序列,在新序列上進行操作。這裡以從小到大排序為例進行講解。插入排序的基本思想是,將元素逐個新增到已經排序好的陣列中去,同時要求,插入的元素必須在正確的位置,這樣原來排序好的陣列是仍然有序的。在實際使用中,通常是排序整個無序陣列,所...
插入排序(C 語言實現)
插入排序分為直接插入排序和折半插入排序,直接插入排序利用遍歷的方式查詢插入位置,時間複雜度為n 2,直接插入法由於不會改變相同元素的相對順序,所以直接插入排序是一種穩定的排序演算法。折半插入排序 二分插入排序 折半插入利用二分法查詢插入位置,只是減少了查詢比較的操作,所以其時間複雜度仍為n 2,二分...