常用的排序演算法

2022-07-21 14:15:20 字數 2020 閱讀 8569

這篇博文主要講解一下主流的幾大排序演算法

選擇排序應該是這麼多排序演算法中最簡單的一種排序演算法了,主要思路是找到陣列中最小的元素,其次,將它和陣列的第乙個元素交換位置(如果第乙個元素就是最小的元素就和自己交換)。再次,在剩下的元素中重複此行為。

選擇排序的執行時間和輸入無關

資料移動的次數最少(n次)

陣列的左邊始終保持有序

不穩定

void selectsort(vector& arr) 

}if (t != i)

}}

插入排序類似我們打撲克時整理牌時的操作,我們乙個乙個元素的來處理,每次將要插入的元素插入到其他已有順序的陣列中(陣列的右邊)

陣列中每個元素距離它的最終距離都不遠,乙個有序的大陣列接乙個小陣列,陣列中只有幾個數字的位置不正確,此時用插入排序是很快的

穩定的陣列的右邊是有序的

void insertsort(vector& arr) 

//找到了合適的位置,賦值

a[j+1] = t;

}}

希爾排序是基於插入排序的快速的排序演算法,希爾排序是將待排序的陣列元素 按下標的一定增量分組 ,分成多個子串行,然後對各個子串行進行直接插入排序演算法排序;然後依次縮減增量再進行排序,直到增量為1時,進行最後一次直接插入排序,排序結束。

希爾排序就是分組➕插入排序,分組每次都減半

非穩定的排序

希爾排序的執行時間依賴於增量序列

void shellsort(vector& arr) 

a[k+gap] = tmp;}}

}}

}

void shellsort2(int a, int n)

a[k + gap] = temp;

}}

歸併排序,可以先遞迴的將陣列分割直到最小單位,然後合併成乙個大陣列,在這個過程中進行排序

以陣列中心來劃分,mid = (l + r) / 2,分成兩半的陣列分別從頭開始進行比較,利用雙指標,哪個數小就把它放進答案陣列中,再將該指標移動一位,繼續比較。

歸併排序是穩定的

void mergesort(int q,int l,int r) 

while (i <= mid) tmp[k++] = q[i++];

while (j <= r) tmp[k++] = q[j++];

for (i = l,j = 0;i <= r;i++,j++) q[i] = tmp[j ];

}

快速排序是本人最喜歡的排序演算法,它將乙個陣列分成兩個子陣列,將兩部分獨立的排序

首先確定分界點x,個人喜歡中點,不用考慮啥越界問題,然後遞迴處理左右兩段,接著利用左右雙指標演算法,左邊i指標先走,只要這個數小於x,i指標就一直往後走,然後移動j指標,當j指標指向的數字大於x,就一直往前走,如果兩個指標沒有相遇,就交換

快排是不穩定的

快排一般來說很快,而且都是乙個套路

void quicksort(int q,int l,int r) 

} quicksort(q,l,j),quicksort(q,j+1,r);

}

思路:處理陣列中有大量重複資料 ,此時可以用三路快排,< x,== x, > x 來進行快排

**

void quicksort(int q,int l,int r) 

quicksort(q,l,j - 1);

quicksort(q,j,r);

}

不出意外,氣泡排序是大部分接觸程式設計的人第乙個學會的排序演算法,因為它很簡單。比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個,一直重複到倒數第二個元素。

氣泡排序很簡單

氣泡排序是穩定的

void bubblesort(int q,int len) 

}}}

常用的排序演算法

排序方式 插入排序 直接插入排序 shell排序 選擇排序 直接選擇排序 堆排序交換排序 氣泡排序 快速排序 歸併排序 分配和索引排序 基數排序 桶式排序 include using namespace std 直接插入排序 arr為待排陣列,n為陣列長度 void insertsort int a...

常用的排序演算法

1.氣泡排序 private static void bubblesort int a 列印氣泡排序的結果 for int i 0 i2.快速排序 public class quicksort qs.data data qs.sort 0,qs.data.length 1 qs.display 3....

常用的排序演算法

1.氣泡排序 時間複雜度 o n 2 氣泡排序演算法的運作如下 從後往前 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上...