排序3 氣泡排序 排序4 快速排序

2021-10-07 08:43:59 字數 1554 閱讀 3679

交換類的排序有快速排序,氣泡排序

3.氣泡排序**

3.1原理

設原資料為 5 2 9 1

第一趟從第乙個數字5開始arr[j]>arr[j+1]交換,小於等於不交換

5>2交換:2 5 9 1

5<9 不交換: 2 5 9 1

9>1交換: 2 5 1 9

最大數字9已經到最後

第二趟2<5不交換:2 5 1 9

5>1交換: 2 1 5 9

由第一趟可知9已經最大,不用5與9再比較

第三趟2>1交換:1 2 5 9

已經有序

注意:n個資料需要n-1趟

3.2**:

void

bubblesort

(int

*arr,

int len)}}

}

3.3評價

①時間複雜度o(n^2),空間複雜度o(1)

②穩定,因為不存在跳躍式交換資料,該排序為相鄰資料交換

4.快速排序***(排序中平均效能最快)

4.1原理

//每步的排序**

static

intpartition

(int

*arr,

int low,

int high)

if(arr[high]

//從low往右找數字》tmp

while

(low

<=tmp)

if(arr[low]

>tmp)

} arr[low]

=tmp;

//low=high,tmp的值放入

return low;

//返回基準的位置

}//每次排序,三步的low和high位置不同,直接寫道quicksort中引數不夠,遞迴

static

void

quick

(int

*arr,

int low,

int high)

if(lpar+

1}void quicksort

(int

*arr,

int len)

4.3評價

①每一步排序:時間複雜度 o(n),把資料遍歷了一遍,空間複雜度o(1)

遞迴次數:log2^n

快排:時間複雜度:o(n*log2n),空間複雜度o(log2n),快但空間占用大

注意:log2^n可以寫為logn,因為時間空間複雜度表示函式關係,不是具體數值,常熟可以去掉,且只取最高次項

②有序的資料:時間複雜度o(n^2),變為選擇排序,後面排序5為選擇排序

則快排越有序越慢,與插入排序相反。因此可以先快排序,資料一定有序後再用插入排序

②不穩定,有資料跳躍

排序 氣泡排序 快速排序

快速排序 氣泡排序就是自上向下依次對比兩個數字,若上面的數字大於下面的數字,則兩者交換,否則不交換。這樣每次迴圈結束,未排序的最大的數就到了最下面。如陣列前兩次迴圈過程如下 快速排序的核心是partition 函式,其功能如下所示 34的位置找到後,其將陣列分成兩部分,前一部分都比34小,後一部分都...

排序 氣泡排序 快速排序

1 基本思想 將第乙個記錄的關鍵字與第二個記錄的關鍵字比較,若為逆序,則將兩個記錄交換,再向後比較。關鍵字小的漂浮,關鍵字大的下沉。2 穩定性 演算法穩定。3 時間複雜度 o n 空間複雜度 o 1 4 實現 include define n 5 陣列長度上限 intmain printf 氣泡排序...

排序(氣泡排序 快速排序

關於排序的穩定性 在待排序的記錄序列中,存在多個具有相同的關鍵字的記錄,若經過排序,這些記錄的相對次序保持不變,即在原序列中r i r j 且r i 在r j 之前,而在排序後的序列中,r i 仍在r j 之前,則稱這種排序演算法是穩定的 否則稱為不穩定的。一 氣泡排序 氣泡排序的基本思想 每次比較...