在這裡我們要提出逆序對的相關問題,設 a 為乙個有 n 個數字的有序集 (n>1),其中所有數字各不相同。
如果存在正整數 i, j 使得 1 ≤ i < j ≤ n 而且 a[i] > a[j],則 這個有序對稱為 a 的乙個逆序對,也稱作逆序數。
例如,陣列(3,1,4,5,2)的逆序對有(3,1),(3,2),(4,2),(5,2),共4個。
所以像選擇,排序,插入每次都是消去乙個逆序對,所以執行的次數會比較高。
所以希爾排序就是一次我不只消掉乙個逆序對,而是一次消掉多個逆序對,這樣效率就高了。
執行**如下
#include
void
xier_sort
(int a[
],int n);
int main()
void
xier_sort
(int a[
],int n
)//內層是插入排序}}
}
運算結果如下: 十大排序之選擇排序 排序演算法 C語言實現
選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理是 第一次從待排序的資料元素中選出最小 或最大 的乙個元素,存放在序列的起始位置,然後再從剩餘的未排序元素中尋找到最小 大 元素,然後放到已排序的序列的末尾。以此類推,直到全部待排序的資料元素的個數為零。選擇排序是不穩定...
十大排序之插入排序 排序演算法 C語言實現
插入排序,一般也被稱為直接插入排序。對於少量元素的排序,它是乙個有效的演算法 插入排序是一種最簡單的排序方法,它的基本思想是將乙個記錄插入到已經排好序的有序表中,從而乙個新的 記錄數增1的有序表。在其實現過程使用雙層迴圈,外層迴圈對除了第乙個元素之外的所有元素,內層迴圈對當前元素前面有序表進行待插入...
十大排序之C語言
基本思想 比較相鄰的兩個數,如果前者比後者大,則進行交換。每一輪排序結束,選出乙個未排序中最大的數放到陣列後面。首先,要了解什麼是氣泡排序。氣泡排序是常用的一種排序方法,其基本方法就是逐次比較。即一次比較兩個數,若它們的順序錯誤,則它們交換 重複進行,直到沒有需要交換為止。1.1 演算法描述 比較相...