兩兩比較key值,如果發生逆序(排列的順序與期望的順序相反)就交換,知道所有物件都排序完畢!常見的3種交換排序演算法:氣泡排序,shaker排序和快速排序。
設待排序列中有 n 個物件, 首先比較物件v[n-1]和v[n-2], 如果v[n-1]
此種排序是對氣泡排序的改進,氣泡排序每次只能從乙個方向進行遍歷,而shaker排序每次遍歷包括兩個方向,先從前向後,再從後往前雙向交替,效率上較氣泡排序有所改進,**如下:
快速排序採用的是一種分治的思想:取待排序物件序列中的某個物件為基準(任意取乙個),按照其他物件與該基準物件的大小關係,將整個序列劃分為左右兩個子串行,其中左側子串行中所有物件值都小於或者等於基準值,右側物件序列中的所有物件值都大於基準值,然後對左右這兩個子串行重複上述操作(遞迴),直至子串行為空為止!還是比較容易理解,這裡就不畫圖了。
1左飛:c++資料結構原理與經典問題求解#ifndef exchangesort_h
2#define exchangesort_h
3 #include 4 #include 5
using
std::vector;
6using
std::cout;
7using
std::endl;
8 template 9
class
exchangesort
1023
24/*
25* bubblesort functions
26*/
27void
bubblesort()
2833
34/*
35* shakersort functions
36*/
37void
shakersort()
3851 }//
end for
52 right =shift;
53for (i = right; i > left; --i)//
from right to left
5460 }//
end for
61 left =shift;
62 }//
end while63}
6465
6667
/*68
* quick sort
69*/
70void quicksort(int left, int
right)
7182
if (i != left) quicksort(left, i - 1
);83
if (j != right) quicksort(j + 1
, right);84}
85/*
86* exchange two elements of list
87*/
88void swap(int i, int
j)89
9495
/*96
* display the sorted result
97*/
98void
out()
99105 cout <
106}
107};
108109
#endif
110111
112//
exchangesorttest
113 #include "
exchangesort.h
"114 #include 115
using
namespace
std;
116117
const unsigned numele = 8
;118
int data[numele] = ;
119120
121int
main()
122
資料結構 交換排序
交換排序的基本思想是 兩兩比較待排序記錄的關鍵字,如果發生逆序 即排列順序與排序後的次序正好相反 則交換之,直到所有記錄都排好序為止。基本思路 每趟不斷將記錄兩兩比較,並按 前小後大 或 前大後小 規則交換。優點 每趟結束時,不僅能擠出乙個最大值到最後面位置,還能同時部分理順其他元素 一旦下趟沒有交...
c 資料結構 交換排序(起泡排序)
1.演算法思想 兩兩比較相鄰的關鍵碼,如果反序,則要交換位置,直到沒有反序記錄為止 2.每一趟起泡排序前,令exchange的初值 0 在以後的排序過程中,只要有記錄交換 exchange就不為0 所以,一趟比較結束時,可以通過exchange的值是否為0來判斷是否有記錄交換,從而判別整個氣泡排序的...
資料結構 排序之交換排序
本節將兩種交換排序氣泡排序和快速排序 氣泡排序是最簡單的交換排序方法,比較相鄰兩個記錄的關鍵字,將大的放到右邊,小的放到左邊,如圖所示 從而使關鍵字小的左移 大的右移 每一次迴圈最右邊的必定是關鍵字最大的元素,外面再加一層迴圈即可得到有序序列。實現 include using namespace s...