排序算法總結

摘要:1、冒泡排序 冒泡排序是一種簡單的排序方法,算法如下: 1. 首先將所有待排序的數字放入工作列表中。 2. 從列表的第一個數字到倒數第二個數字,逐個檢查:若某一位上的數字大于他的下一位,則將它與它的下一位交換。

1、冒泡排序

冒泡排序是一種簡單的排序方法,算法如下:

1.?首先將所有待排序的數字放入工作列表中。

2.?從列表的第一個數字到倒數第二個數字,逐個檢查:若某一位上的數字大于他的下一位,則將它與它的下一位交換。

3.?重復2號步驟(倒數的數字加1。例如:第一次到倒數第二個數字,第二次到倒數第三個數字,依此類推...),直至再也不能交換。

用C語言實現如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14intBubbleSort(int*a,intn)//a是待排序的整型數組,n是待排序數組的元素個數

{

inti,j,temp;

for(j=0;j

for(i=0;i

{

if(a[i]>a[i+1])//數組元素大小按升序排列

{

temp=a[i];

a[i]=a[i+1];

a[i+1]=temp;

}

}

2、插入排序

插入排序也是一種簡單排序方法,算法如下:

1.?從第一個元素開始,認為該元素已經是排好序的。

2.?取下一個元素,在已經排好序的元素序列中從后向前掃描。

3.?如果已經排好序的序列中元素大于新元素,則將該元素往右移動一個位置。

4.?重復步驟3,直到已排好序的元素小于或等于新元素。

5.?在當前位置插入新元素。

6.?重復步驟2。

用C實現如下:

?

1

2

3

4

5

6

7

8

9

10

11

12intinsert(int*a,intn)

{

inti,?j,?temp;

for(i=1;?i

{

temp=a[i];

for(j=i;?j>0?&&?a[j-1]>temp;?j--)

a[j]=a[j-1];

a[j]=temp;

}

3、選擇排序

選擇排序的思想如下:

1.?設數組內存放了n個待排數字,數組下標從1開始,到n結束。

2.?i=1

3.?從數組的第i個元素開始到第n個元素,尋找最小的元素。(具體過程為:先設arr[i]為最小,逐一比較,若遇到比之小的則交換)

4.?將上一步找到的最小元素和第i位元素交換。

5.?如果i=n-1算法結束,否則回到第3步

用C語言實現如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18intsort(int*a,intn)

{

inti,?j,?min,?temp;

for(i=0;?i

{

min=i;

for(j=i+1;?j

if(a[min]>a[j])

min=j;

if(min?!=?i)

{

temp=a[min];

a[min]=a[i];

a[i]=temp;

}

}

4、快速排序

(a)一趟排序的過程:

(b)排序的全過程

實踐證明,快速排序是所有排序算法中最高效的一種。它采用了分治的思想:先保證列表的前半部分都小于后半部分,然后分別對前半部分和后半部分排序,這樣整個列表就有序了。

快速排序的基本算法是:


原文鏈接

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1.簡介插入排序(Insertion Sort)的算法描述是一種簡單直觀的排序算法。它的工作原理是通過構建有序序列...
    AngerCow閱讀 388評論 0 1
  • 題記: 直接插入排序(穩定)-->希爾排序 : 屬于插入排序 簡單選擇排序(穩定)-->堆排序 :屬于選擇排序...
    Pitfalls閱讀 2,831評論 2 3
  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,771評論 0 33
  • 一、概述 排序算法概念 在計算機科學與數學中,一個排序算法是將一組雜亂無章的數據按一定的規律順次排列起來的算法。排...
    簡書冷雨閱讀 1,056評論 0 0
  • 天高云淡草漸黃, 小徑信步踏斜陽。 若問枝葉何亂舞, 卻怕秋來風乍涼。 2015.9.13
    我刀劃破長空閱讀 193評論 3 0