常見的排序演算法

2022-10-11 03:36:09 字數 1550 閱讀 8059

直接插入排序

:按順序插入關鍵字,插入時依次查詢對應的位置,直接插入,後面的依次後移。

氣泡排序

:依次把相鄰的兩個數值進行比較,然後交換位置。重複上述操作,直至排序完成。

簡單選擇排序

:每次選擇最小的,與第乙個沒有排過序的數值的位置交換。

希爾排序

:通過增量 分成若干個子串行,進行直接插入排序。逐漸減少增量,繼續上述操作,將增量縮小到1為止。

快速排序

:設兩個指標指示頭尾,從尾開始,首尾交替輪流和基數進行比較,並交換位置。

歸併排序

:兩兩歸併,在這基礎上在進行兩兩歸併,直到最後得到乙個有序的序列

1、直接插入排序

將要比較的序列分為有序的序列和無序的序列。排序第 i 個數的時候,前 i- 1 個數是有序陣列,後面是無序陣列,需要將第 i 個數與前 i- 1 個數倒序比較,找到適合的位置插入,原來這個位置的數及以後的數往後移一位。直至排序完成為止。

例:4,2,6,1,8,7

排序過程:

2、氣泡排序

將要排序的序列的第乙個值和第二個值作為關鍵字,進行比較,如果是逆序的話,調換位置。然後關鍵字換為第二個值和第三個值繼續進行比較,由此類推。

例:5,2,7,4,2,3,9

排序過程:

3、簡單選擇排序

找出要排序的序列中最小的值,和第乙個位置的值交換。在除最小值之外的序列中,找出最小的值,與第二位置的值交換。在除最小值和第二小值之外的序列中,找出最小值,與第三位置的值交換。由此類推。

例:3,1,4,2,5

4、希爾排序: 對直接插入排序的改進

將要排序的序列通過增量(一般第乙個增量為序列長度的一般,是整數) 分成若干個子串行,然後對每個子串行中相同位置的數值進行直接插入排序。然後減少增量(比上乙個增量小),在進行上述操作,直至序列有序。

例:32,5,23,67,43,12,4,5

5、快速排序

設定乙個基數(一般是第乙個),在設定兩個雙指標(i,j)分別指向第乙個和最後乙個元素。

(1),讓 j 指向的元素與基數進行對比,如果比他小的話,則互換 i , j 位置上的數值,並使 i ++(然後下次對比由 i 與基數對比,比基數小的話,i++,繼續對比。比基數大的話,互換 i , j 位置上的數值,並使 j--。重複(1)(2)操作)

(2),如果比他大的話,讓 j-- 。然後繼續 (1)(2) 操作。直到 i=j的時候,可以得到兩個序列,由基數進行分隔,前面序列小於後面序列。然後再分別對前後兩個序列進行上述遞迴操作。

例:39,58,32,47,46,19,25,55

6、歸併排序

將長度為 n 的序列進行兩兩歸併,得到 n/2 個長度為 2/1 的有序的子串行,然後再兩兩歸併,如此重複,直到最後得到乙個長度為 n 的有序序列

例:30,2,23,43,54,12,20

常見的排序演算法

一 氣泡排序 include include void swap int a,int b void bubblesort int arr,int size int main void bubblesort a,5 for int i 0 i 5 i cout 二 選擇排序 void selectio...

常見的排序演算法

需要包含的標頭檔案 include stdafx.h include include include 氣泡排序是穩定排序 時間複雜度 o n 2 void swap int a,int b void bubblesort int a,int n void printnum int a,int n a...

常見的排序演算法

排序演算法是最基礎,也是最簡單的演算法思想,因為應用場景多,書寫簡單,所以應用較為普遍,所以在面試和考試的時候,都會涉及到排序演算法,雖然排序演算法種類很多,但是只要理解了思想,然後靈活運用,那麼就不難記憶.排序演算法兩個需要記憶和理解的點就是 演算法思想和時間複雜度.下面我們就介紹和分析一下常見的...