常見的排序演算法

2021-06-28 06:32:30 字數 1590 閱讀 9856

需要包含的標頭檔案:

#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[j+1] = temp;

} }}void main()

; int num = sizeof(a)/sizeof(a[0]);

cout<

void printnum(int a, int n)

a[j+gap] = temp;

}} }

}void main()

; int num = sizeof(a)/sizeof(a[0]);

cout<

直接選擇排序和直接插入排序類似,都將資料分為有序區和無序區,所不同的是直接插入排序是將無序區的第乙個元素直接插入到有序區以形成乙個更大的有序區,而直接選擇排序是從無序區選乙個最小的元素直接放到了有序區的最後。

陣列 a[0...n-1]

1:初始時,陣列全為無序區為 a[0...n-1].令i=0;

2:在無序區a[i...n-1]中選取乙個最小的元素,將其與a[i]交換。交換之後a[0...i]就形成了乙個有序區

3:i++並重複第二步知道 i == n-1.排序完成

選擇排序不是穩定排序

例如有: 5 8 5 2 9 

第一次排序後 第乙個 5與2 交換,那麼兩個5的相對位置發生了變化。

時間複雜度也是o(n^2)不過比氣泡排序總體來說好一點

void printnum(int a, int n)

int i = start;

int j = end;

int k = a[i];

while(i=k)

if(i

不穩定:就是大小相同的兩個數,經過排序後,最終位置與初始位置交換了。

快速排序:27 23 27 3以第乙個27作為pivot中心點,則27與後面那個3交換,形成3 23 27 27,排序經過一次結束,但最後那個27在排序之初先於初始位置3那個27,所以不穩定。

堆排序:比如:3 27 36 27,如果堆頂3先輸出,則,第三層的27(最後乙個27)跑到堆頂,然後堆穩定,繼續輸出堆頂,是剛才那個27,這樣說明後面的27先於第二個位置的27輸出,不穩定。

void printnum(int a, int n)

else

}a[start] = temp;

}void heapsort(int a, int n)

//進行排序

for(i=n-1; i>0; --i) }

void main()

; int num = sizeof(a)/sizeof(a[0]);

cout<

void printnum(int a, int n)

{ for(int i=0; i

常見的排序演算法

一 氣泡排序 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...

常見的排序演算法

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

常見的排序演算法

相信大家面試的時候都要經歷手寫什麼什麼排序這種事情吧,要不就是大概說一下思路。不許用各種語言封裝好的函式 api,僅僅用原生的方法把他寫出來。雖然看起來沒什麼意思,但是這也是考察乙個人的基礎有沒有紮實 程式設計思想好不好的一種方法。重要的事情說三遍 主要理解快速排序!主要理解快速排序!主要理解快速排...