交換排序(氣泡排序 快速排序)及其優化

2021-08-28 15:57:09 字數 1260 閱讀 3263

交換排序基本思想

兩兩比較待排記錄的關鍵字,一旦發現兩個記錄的次序與排序的要求相逆,則交換這兩個記錄的位置,直到表中沒有逆序的記錄存在為止。

分類

基本思想:序列中相鄰的兩個元素進行比較,如果前乙個元素大於後乙個元素,則交換二者位置,接著繼續向後迴圈比較直到最後乙個元素,這樣一趟下來就可以將最大的那個元素放到最後的位置。完成之後,進行第二趟排序,迴圈比較直到倒數第二個元素,就可以將第二大元素放於倒數第二個位置......迴圈以上步驟,直到迴圈比較到原陣列的最後兩個元素,排序即可完成。

**體現:

void bubble_sort(int arr,int len)

} if(flag)

break;

}}

複雜度分析:

1:空間複雜度:可以看出並沒有什麼大的額外空間,所以為o(1);

2:時間複雜度:

3:演算法穩定性:

氣泡排序並未改變相同元素的先後次序,所以是穩定的排序演算法

基本思想:快速排序就是氣泡排序的一種改進,氣泡排序是通過每一趟冒泡將最大值(最小值)放到恰當位置,而快速排序則是每趟排序從待排序區間選乙個基準值(也稱作樞紐值),將比它小的資料全放在其左邊,將比它大的值放在其右邊然後遞迴其左右子區間對其排序,一層層遞迴下去,某區直到間只剩乙個資料時,停止遞迴,此子區間已經算是有序,繼而向其上層區間返回,一層層向上返回,當首次樞紐值的左右區間均已有序時,整個排序就算完成。

遞迴**:

#includeusing namespace std;

int partition(int *arr,int low,int high) //劃分演算法,找到元素正確位置

} arr[low]=tmp; //最終的low/high位置即是基準在序列中的最終位置,放入即可

return low; //返回基準的最終位置下標

}void quicksort(int *arr,int low,int high) //遞迴形式的快排

}void show(int *arr,int len)

if(i-low>1)

}}

交換排序 氣泡排序,快速排序

交換排序 氣泡排序,快速排序 執行環境 vs2010 include include include include define ok 1 define true 1 define false 0 define maxsize 50 typedef struct redtype typedef s...

交換排序(快速排序 氣泡排序)

1.快速排序 先從數列中取出乙個數作為基準數 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊 再對左右區間重複第二步,直到各區間只有乙個數。以乙個陣列作為示例,取區間第乙個數為基準數。0 1 2 3 4 5 6 7 8 9 72 6 57 88 60 42 83 73 4...

交換排序(氣泡排序,快速排序)

氣泡排序演算法 顧名思義,就是將最重的 最大元素 浮動到最下面,最輕的 最小元素 浮動到最上面 演算法過程 1.迴圈陣列長度length 1次,下標為 因為每次迴圈後就會出現乙個最大 公升序 或最小 降序 只需要比較n 1就行 1.1 在前 length i個元素中迴圈因為已經有i個已經有序 1.1...