交换排序之——冒泡排序(c/c++)
生活随笔
收集整理的這篇文章主要介紹了
交换排序之——冒泡排序(c/c++)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
冒泡排序是很有名的排序算法,經常會被人們提到,是一種較為常見的排序方法。
顧名思義,它是將數按照一定順序給篩選出來。假定為升序,該算法將多次訪問數列,第一次將最大數放置到末尾,第二次將次大數放置到倒數第二位,依次類推,直至排序結束。它每一次都能將一個數放到排序后它應該在的最終位置,待排序數會越來越少,最終均有序。例如:
初始數列為2,4,1,6,3,5 ? ?? 一趟之后為 2,1,4,3,5,6 ? ?? 第二趟后為 1,2,3,4,5,6 ? 此時數列已然有序,結束。
冒泡排序是穩定的排序算法。它和直接插入排序是常用的兩種簡單排序方法。
它的時間復雜度為o(),最好情況下為o(n)。空間復雜度為o(1)。
完整代碼如下:(升序)
#include<iostream>#define N 20void bubbleSort(int* arr, int num);int main(){int a[N] = { 3, 2, 4, 6, 7, 5, 18, 9, 0, 1,16, 8, 20, 33, 28, 64, 19, 31, 30, 25 };for (int i = 0; i < N; i++){std::cout << a[i] << " ";}std::cout << '\n';bubbleSort(a, N);for (int i = 0; i < N; i++){std::cout << a[i] << " ";}return 0;}void bubbleSort(int* arr, int num){int count, i, j,temp;//count計數變量,為避免已經有序但程序仍運行,提高效率。count=1;while (count){j = 1;//記錄待排序數的數量變化(依次減少的)count = 0;for (i = 0; i < num - j; ++i){if (arr[i] > arr[i + 1]){temp = arr[i];arr[i] = arr[i + 1];arr[i + 1] = temp;//本質是交換++count;}}++j;}}?
總結
以上是生活随笔為你收集整理的交换排序之——冒泡排序(c/c++)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 插入排序之——希尔排序(c/c++)
- 下一篇: 交换排序之——快速排序(c/c++)