各種排序演算法總結 基於陣列

2022-08-22 02:57:09 字數 1358 閱讀 3809

寫**前,將這些演算法分步驟建立模型,**就好寫了

1、氣泡排序

氣泡排序是非常容易理解和實現,以從小到大排序舉例:

設陣列長度為n。

比較相鄰的前後二個資料,如果前面資料大於後面的資料,就將二個資料交換。

這樣對陣列的第0個資料到n-1個資料進行一次遍歷後,最大的乙個資料就「沉」到陣列第n-1個位置。

n=n-1,如果n不為0就重複前面二步,否則排序完成。

void _swap(int *a, int *b)

void bubblesort(int a,int

n) }

if(flag == 0

)

break

; }

}

氣泡排序基本就是,兩兩相鄰的比較,滿足條件交換,經過一輪使得最大的數沉到最後,迴圈n-1輪,排序完成。

2、選擇排序 

設陣列為a[0…n-1]。

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

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

i++並重複第二步直到i==n-1。排序完成。

1

void selectsort(int a, intn)2

16}17if(i !=nminindex)

18

21}

22 }

選擇排序就是將待排序的元素分為無序區和有序區,從無序區選取最小的元素插入有序區的最後,迴圈n-1輪,排序完成。

3、插入排序

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

設陣列為a[0…n-1]。

初始時,a[0]自成1個有序區,無序區為a[1..n-1]。令i=1

將a[i]併入當前的有序區a[0…i-1]中形成a[0…i]的有序區間。

i++並重複第二步直到i==n-1。排序完成。

1

void insertsort(int a, intn)2

17}18int insertindex =j;

19int tmp =a[i];

20for(j = i-1; j >= insertindex; j--)

2124 a[insertindex] =tmp; 25}

26 }

選擇排序就是將待排序的元素分為無序區和有序區,將無序區第乙個元素插入到有序區中,迴圈n-2輪,排序完成。

各種排序演算法總結

注 以下所講排序,以公升序排序為例!選擇排序 作者思路 在一組數中,選擇第乙個數標記為最小值,在剩下的數中找比它小的數,若找到則交換兩數,標記新的 最小值 然後繼續往下找,這樣一趟下來就可以找到一組數中第二小的值,第二次以第二個數作為最小值,如此迴圈下去。這是最簡單 最基礎的一種排序演算法。例子 1...

各種排序演算法總結

1 插入排序 void insertsort int a,int n a j 1 key 插入排序是穩定的排序,平均和最壞時間複雜度是o n 2 最好的時間複雜度是o n 對應於全部排好序的情況。2 氣泡排序 void bubblesort int a,intn 氣泡排序是穩定的排序,平均和最壞時間...

各種排序演算法總結

created by vencent on 2008.8.29 1.插入排序 1.1 一般插入排序 insertsort int array,int length 1.2 折半插入排序 bininsertsort int array,int length 1.3 希爾排序 shellsort int...