冒泡排序和选择排序
八大排序中比較簡單的兩個---->選擇排序和冒泡排序
冒泡排序:
????????這個算法的名字由來是因為越小的元素會經由交換慢慢“浮”到數列的頂端(或者越大的元素會沉到底部,這取舍于你的數組的降序還是升序),所以叫冒泡排序!具體原理圖如下所示:
下圖摘自:百度安全驗證
void BubbleSort(int* ar, int len) //ar是指針是數組的指針
{assert(ar != NULL);for (int i = 0; i < len; i++) //循環的輪數 比如數組由5個元素 比較四次就可以了{for (int j = 0; j < len - 1 - i; j++) //控制每一輪的比較次數//同樣以五個元素的數組為例 第一輪比較的時候需要比較四次{if (ar[j] > ar[j + 1]) //按照升序{ //如果if中寫成了(ar[j] < ar[j + 1])int tmp = ar[j];ar[j] = ar[j + 1];ar[j + 1] = tmp;}}}
}
選擇排序:
????????首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
再從剩余未排序元素中繼續尋找最小(大)元素,然后放到已排序序列的末尾。
重復第二步,直到所有元素均排序完畢。
原理及過程如下圖所示:
該圖取自:1.2 選擇排序 | 菜鳥教程
來看代碼:
void SelectSort(int* ar, int len)
{assert(ar != NULL);int minindex = 0;//存放最小值的下標for (int i = 0; i < len - 1; i++) //從開頭開始{minindex = i;for (int j = i + 1; j < len; j++) //走訪未排序的元素{if (ar[j] < ar[minindex]){minindex = j;}}//此時最小值的下標為minindex = j 然后將ar[minindex] 中的值和ar[i]中的值進行交換int temp = ar[minindex];ar[minindex] = ar[i];ar[i] = temp;}
}
再來說個排序算法的穩定性:
????????假定在待排序的記錄序列中,存在多個具有相同的關鍵字的記錄,若經過排序,這些記錄的相對次序保持不變,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,則稱這種排序算法是穩定的;否則稱為不穩定的。(百度百科)
白話說就是排序的時候如果兩個元素相等,再排序的時候這兩元素不進行交換,這個排序就是穩定的!
剛剛看到了一句話:
? ? ? ? 假設你到了2070年,你已經七老八十了,坐在空無一人的房間,臃腫老態,沒錢沒權,生活不能自理,然后對著上帝說:“上帝啊,讓我再年輕一次吧!”,上帝實現了你的愿望,你到了2021年,這下你準備怎么活呢?
努力吧兄弟們!
總結
- 上一篇: Linux终端实现自己的命令解释器---
- 下一篇: Linux下进程间通信-------管道