排序演算法01 交換排序

2021-10-02 10:12:43 字數 2770 閱讀 7861

用兩個指標即可,乙個指標指向當前排序結點,另乙個指標指向後續相鄰結點,比較結點的資料大小並交換。內迴圈控制每趟排序的終止條件,外迴圈控制整個排序的終止條件。每一趟排序記錄本次是否進行交換,若沒有進行交換,則說明所有元素都有序,直接跳出外迴圈,否則將當前指標cur再次指向首元結點,進行下一次迴圈。

/**

* 時間複雜度為o(n^2)

* (n-1) + ... + 3 + 2 + 1

*/#include

using

namespace std;

typedef

struct

node

node;

node*

bubblesort

(node* head)

cur = cur->next;

}// 此時一趟排序完成,cur指向最靠前的已排序元素if(

!isswap)

else

}return head;

}void

show

(node* head)

}int

main()

;int n =10;

for(

int i=

0; i

) cout<<

"單鏈表建立完成,資料如下:"

;show

(head)

; head =

bubblesort

(head)

; cout<

"排序結果如下:"

;show

(head)

;return0;

}

/**

* 時間複雜度為o(nlogn)

*/#include

using

namespace std;

intpartition

(int

* nums,

int low,

int high)

//while迴圈退出後,low==high,指向value所放位置

nums[low]

= value;

return low;

}void

quick_sort

(int

* nums,

int low,

int high)

}int

main()

;int len=

sizeof

(nums)

/sizeof

(int);

quick_sort

(nums,

0, len-1)

; cout<<

"排序後為:"

<

for(

int i=

0; i

) cout<

<<

" ";

return0;

}

1. 排序過程舉例

降序排列【520,211,438,888,007,111,985,666,996,233,168】

第一趟(個位)分配結果:

第一趟收集結果:

此時得到的是個位元素遞減的序列

注:隊頭元素靠前,比如438在888和168前面

第二趟(十位)分配結果:

第二趟收集結果:

第三趟(百位)分配結果:

第三趟收集結果:

2. 基數排序的應用

3. 基數排序適用場景

桶排序的思想很簡單,就不寫分析了

/**

* @author leo

* 對於桶排序我們得知道排序元素的範圍,比如當前元素範圍為0 ~ 100

*/const

int range =

100;

void

bucketsort

(vector<

int>

& nums)

int index =0;

for(

int i =

0; i <= range; i++)}

//for迴圈完成後,nums就是有序狀態了

}

排序演算法 交換排序

交換排序的基本思想 兩兩比較待排序元素的關鍵字,發現兩個元素的次序相反時則進行交換,直到沒有反序的元素為止。1.氣泡排序 交換排序 演算法 氣泡排序 bubble sort 輸入 待排序元素的陣列,待排序元素個數 輸出 原理 通過無序區中相鄰元素間關鍵字的比較和位置的交換,使關鍵字最小的元素如氣泡一...

排序演算法 交換排序

基本思想 在乙個待排序序列中,兩兩比較元素的排序碼,如果不滿足次序要求則進行交換,直到整個排序序列滿足要求。思想 對待排序序列從前向後,依次比較相鄰元素的排序碼,若發生逆序,則進行交換。實現 include void bubblesort int p,int n if flag 減少不必要的比較 r...

交換排序演算法

快速排序 為啥叫快速排序,因為速度快,效率高 1.先找乙個數作為基準。作為基準的這個數,一趟排下來,左邊的數必小於它,右邊的數必大於它,也就是說,它找到了自己的位置。2.將兩個指標i,j分別指向表的起始 基準 和最後的位置。3.比較j指標的數字是否小於基準,j 直到j小於基準,交換位置 4.比較i指...