//c++實現
void swap(int &left, int &right)
/*指標作為引數的交換函式
void swap1(int *left, int *right)
*/
//c++實現
void bubble_sort(vector&nums)}}
//c++實現
void bubble_sort_better(vector&nums)
}if(!flag) //如果flag一直保持0,表示並沒有進行變換,表示後面的遍歷都是增序,就需要再進行排序了
break;}}
//c++實現
void choice_sort(vector&nums)}}
/c++實現
void shell_sort(vector&nums)}}
//c++實現
//兩個子陣列合併函式:$1:子陣列所在的陣列 $2:第乙個子陣列的起點 $3:第乙個子陣列的終點 $4:第二個子陣列的終點
void merge(vector&nums , int first , int mid , int tail)
while(left<=mid)
temp.push_back(nums[left]);
while(right<=tail)
temp.push_back(nums[right]);
int j=0;
for(int i=first;i<=tail && j&nums , int first , int tail)}}
以下是我對於堆排序的一些理解,作圖比較直觀,容易理解
//c++實現
void heapify(vector&nums, int i, int size) // 從a[i]向下進行堆調整
void heap_sort(vector&nums)
}
//c++實現
//分割槽處理,將待排序陣列按照基準值分成左右子陣列,保證左子陣列全部小於右子陣列,並且找出基準值對應的分界索引值
int partition(vector&nums,int first,int tail)
return left;
}//遞迴函式
void quick_sort(vector&nums,int low,int high)
else //遞迴終止條件
return ;
}main()
這兩篇部落格我覺得都寫得挺不錯的,其中也有參考他們的演算法,有興趣的可以仔細地看一下 七大排序演算法
氣泡排序 void bubble int a,int n 選擇排序 void select sort int a,int n n為陣列a的元素個數 將第i 小的數,放在第i 個位置 如果剛好,就不用交換 if i min index 插入排序 typedef int elementtype void...
七大排序演算法
七大排序分類 插入排序 直接插入排序 穩定 希爾排序 不穩定 選擇排序 簡單選擇排序 穩定 堆排序 不穩定 交換排序 氣泡排序 穩定 快速排序 不穩定 歸併排序。直接插入排序 時間複雜度 o n 2 演算法穩定性 穩定void straightinsertsort int a,int n 氣泡排序 ...
七大排序演算法
首先回顧下各種排序的主要思路 一 氣泡排序 氣泡排序主要思路是 通過交換使相鄰的兩個數變成小數在前大數在後,這樣每次遍歷後,最大的數就 沉 到最後面了。重複n次即可以使陣列有序。氣泡排序改進1 在某次遍歷中如果沒有資料交換,說明整個陣列已經有序。因此通過設定標誌位來記錄此次遍歷有無資料交換就可以判斷...