排序之交換排序
氣泡排序
void BubbleSort(int arr[],int n)
{
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-1-i;j++)//每經過一次排序,最大的數就已經確定,因此需要排序的個數就要減少
{
if(arr[j]>arr[j+1])
{
swap(arr[j],arr[j+1]);
}
}
}
}
總結
- 時間複雜度仍為n^2
快速排序
void QuickSort(int arr[],int low,int high)
{
if(low<high)
{
int pk=Partition(arr,low,high);//快速排序實際上是找到一個元素將他作為中間元素進行排序,
//在他左邊的一定比他小,而在他右邊的一定比他大,因此需要遞迴繼續修改其左右兩邊的值
QuickSort(arr,low,pk-1);
QuickSort(arr,pk+1,high);
}
}
void Partiton(int arr[],int low,int high)
{
int pk=arr[low];//pk為哨兵位,用來記錄選定的資料
while(low<high)//一般終止時low==high
{
while(low<high&&arr[high]>=pk)//在達到終止條件前,移動了high或者low後,就不用再進入迴圈了,因此在這也要判斷
high--;
arr[low]=arr[high];//如果原本在high處的數小於哨兵位,就要將其值賦給low,因為哨兵位的值空出來了,
//因此在賦值時不用擔心將前面的值覆蓋了
while(low<high&&arr[low]<pk)
low++;
arr[high]=arr[low];
}
arr[low]=pk;//終止時low==high,再將哨兵位pk的值付給他
return low;
}
總結
- 如果pk中的數是比較居中的數,則效率較高,如果是最小的數或最大的數,則會退化為氣泡排序
相關文章
- 排序:交換排序——氣泡排序法排序
- 交換排序排序
- 排序(1)--插入排序和交換排序排序
- 非交換排序-計數排序和桶排序排序
- 交換排序法排序
- 排序之快速排序排序
- 排序之氣泡排序排序
- 排序之選擇排序排序
- 排序之插入排序排序
- Java排序之計數排序Java排序
- 基本排序之氣泡排序排序
- 資料結構學習(C++)續——排序【3】交換排序 (轉)資料結構C++排序
- 408 DataStructure_Algorithm - 8.3 交換排序ASTStructGo排序
- 排序演算法之 '快速排序'排序演算法
- 排序演算法之——桶排序排序演算法
- 排序演算法之希爾排序排序演算法
- 筆試之排序-直接插入排序、氣泡排序、快速排序筆試排序
- 排序演算法之 '歸併排序'排序演算法
- PHP 排序演算法之希爾排序PHP排序演算法
- 常用排序演算法之桶排序排序演算法
- 經典排序之選擇排序(Java)排序Java
- Python之排序演算法:快速排序與氣泡排序Python排序演算法
- 演算法之常見排序演算法-氣泡排序、歸併排序、快速排序演算法排序
- PHP 排序演算法之選擇排序PHP排序演算法
- PHP 排序演算法之插入排序PHP排序演算法
- 排序演算法之折半插入排序排序演算法
- Java排序演算法之氣泡排序Java排序演算法
- 基於桶的排序之計數排序排序
- 排序演算法總結之堆排序排序演算法
- 排序演算法總結之希爾排序排序演算法
- 基於桶的排序之基數排序以及排序方法總結排序
- Python排序演算法之 選擇排序Python排序演算法
- 排序演算法之快速排序的實現排序演算法
- 排序演算法入門之「插入排序」排序演算法
- 排序演算法入門之「選擇排序」排序演算法
- 看動畫學演算法之:排序-count排序動畫演算法排序
- 看動畫學演算法之:排序-快速排序動畫演算法排序
- 排序演算法總結之歸併排序排序演算法