經典排序演算法

2021-06-22 19:13:38 字數 2714 閱讀 8971

排序分為內部排序和外部排序,內部排序是指待排序的資料都是在記憶體中的,例如陣列;外部排序指待排序資源在記憶體外,例如對檔案的排序。此篇說的是內部排序。通俗地來說,內部排序就是將一堆資料按一定規則對它進行排序。排序又分為穩定排序和不穩定的排序,如果初始序列ai,ak有序(ai = ak),排序後變成了ak,ai,稱為不穩定排序。下面介紹幾個經典常見的排序。(以下排序都是以陣列為例進行排序)

1.選擇排序

思路就是每次從待排序列取出最大或最小的值的元素,插入到以有序的序列後邊。

void select_sort(int a, int n)

}

2.直接插入排序從待排序列中遍歷元素(不需要做對比,直接從取第乙個元素即可),將選中元素按順序插入到以排序的序列中。

void insert_sort(int a, int n)

a[j] = tmp;}}

}

3.氣泡排序簡單的說就是前後兩個元素依次比較,如果不符合,就交換兩者。每一趟排序,可以排出乙個最大或最小的元素,依次冒泡就可以做出排序。通常需要n-1趟排序,可以優化一下,用乙個標記變數來檢測,如果一趟排序中沒有元素進行過交換,說明當前序列已經有序了,不需要在交換了。

void bubble_sort(int a, int n)

}if(check)

break;}}

4.希爾排序希爾排序是將待排序列按照某乙個增量分為若干個子串行,依次對子序列進行插入排序,讓待排序列部分有序,然後將增量遞分為更多的子串行,在做上述排序,直到增量為1.增量的選擇是依次遞減的,增量選擇的好壞關係到時間複雜度,此處選擇折半遞減。下面看**講解。

}5.歸併排序思路是將待排序列,例如有n個記錄,可以將它們看成是n個有序的子串行,對其兩兩進行排序,然後合併成n/2個有序的子串行,再依次兩兩合併,直到最後剩下乙個有序序列,排序完成。

void merge(int a, int b, int s, int m, int t)   

if(s <= m)

if(i <= t)

for(k = 0; k <= t - i; k++)

b[j + k] = a[i + k];

} void msort(int a, int b, int s, int e)

}

堆排序,

快速排序

各種排序比較

序號

排序類別

時間複雜度

空間複雜度

穩定

1

插入排序

o(n2)

1

2

希爾排序

o(n2)

1

×

3

氣泡排序

o(n2)

1

4

選擇排序

o(n2)

1

×

5

快速排序

o(nlogn)

o(logn)

×

6

堆排序

o(nlogn)

1

×

7

歸併排序

o(nlogn)

o(n)

經典排序演算法

1 氣泡排序 bubble sort 最簡單的排序方法是氣泡排序方法。這種方法的基本思想是,將待排序的元素看作是豎著排列的 氣泡 較小的元素比較輕,從而要往上浮。在氣泡排序演算法中我們要對這個 氣泡 序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個序列,並時刻注意兩個相鄰的元素的順序是否正確。...

經典排序演算法

思想 相鄰元素兩兩比較大的往下沉,小的往上浮.具體點說就是兩相鄰元素相互比較,如果前面的元素比後面的大就換位置,否則繼續比較.舉個例子吧 將陣列arr 排序 廢話了那麼多,接下來是應該有 的對吧public static void bulletsort int arr 原理 用乙個索引位置上的元素,...

經典排序演算法

1簡單插入排序 void insert sort elementtype a,int n a i tmp 新牌位置 最好情況 t o n 最壞情況 t o n2 2希爾排序 希爾排序又稱 縮小增量排序 定義增量序列dm dm 1 d1 1void shellsort elementtype a,in...