排序之交換排序
氣泡排序
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中的數是比較居中的數,則效率較高,如果是最小的數或最大的數,則會退化為氣泡排序
相關文章
- 非交換排序-計數排序和桶排序排序
- 排序:氣泡排序&快速排序排序
- 【排序】插入類排序—(折半)插入排序、希爾排序排序
- php插入排序,快速排序,歸併排序,堆排序PHP排序
- 排序演算法(氣泡排序,選擇排序,插入排序,希爾排序)排序演算法
- 插入排序排序排序
- 排序——氣泡排序排序
- 排序之快速排序排序
- PHP 常見4種排序 氣泡排序、選擇排序、插入排序、快速排序PHP排序
- 408 DataStructure_Algorithm - 8.3 交換排序ASTStructGo排序
- Python八大演算法的實現,插入排序、希爾排序、氣泡排序、快速排序、直接選擇排序、堆排序、歸併排序、基數排序。Python演算法排序
- 快速排序&&歸併排序排序
- 計數排序vs基數排序vs桶排序排序
- 氣泡排序、歸併排序與快速排序比較排序
- 排序演算法 - 氣泡排序和選擇排序排序演算法
- 排序演算法 - 快速排序排序演算法
- 選擇排序和快速排序排序
- 排序演算法-堆排序排序演算法
- 四、歸併排序 && 快速排序排序
- Java排序之計數排序Java排序
- 排序演算法__桶排序排序演算法
- 排序演算法__快速排序排序演算法
- 排序演算法__堆排序排序演算法
- 排序演算法:快速排序排序演算法
- 桶排序和基數排序排序
- 排序演算法 - 堆排序排序演算法
- 【JS面試向】選擇排序、桶排序、氣泡排序和快速排序簡介JS面試排序
- php實現 氣泡排序,插入排序,選擇排序PHP排序
- 排序演算法 - 快速插入排序和希爾排序排序演算法
- 排序排序
- 演算法之常見排序演算法-氣泡排序、歸併排序、快速排序演算法排序
- 三種插入排序 直接插入排序,折半插入排序,希爾排序排序
- 經常提及的幾個js排序方法(氣泡排序、選擇排序、計數排序)JS排序
- 桶排序 選擇,插入排序排序
- 歸併排序--排序演算法排序演算法
- 排序演算法(歸併排序)排序演算法
- 排序演算法之 '快速排序'排序演算法
- 氣泡排序與選擇排序排序