冒泡排序是基礎的入門算法。它每次將最大的數放到高位,就像氣泡向上同樣。算法比較相連的兩個數,若是大數在前則對調它們,每次產生一個待排序中的最大的數。算法
每次產生最大的一個數,那麼n個數則須要產生n-1個數便可,也就是說一共須要進行n-1次趟,第一趟待比較的數是n個,連續的兩兩比較,那就須要進行n-1次比較,第二趟時待比較數爲n-1,那麼就須要n-2次比較。spa
#include <stdio.h> void print_arr(int *arr,int len) { int i = 0; for (;i < len;i++) { printf("%d%s", *arr++, " "); } printf("%c",'\n'); } /** * @brief bubble_sort 冒泡排序 * @param arr * @param len */ void bubble_sort(int *arr, int len) { int i = 0; int j = 0; int t = 0; bool flag = true; for (;i < len - 1;i++) { flag = true; for (j = 0;j < len - 1 - i;j++) { if (arr[j] > arr[j+1]) { t = arr[j]; arr[j] = arr[j+1]; arr[j+1] = t; flag = false; } } if (flag) { break; } } } int main(void) { printf("Hello World!\n"); int arr[] = {1,3,-3,47,34,6}; bubble_sort(arr,6); return 0; }
若是一趟沒有調換髮生則說明已經排序完成,這裏引入了一個bool型的變量flag,每趟都置true,若是發生調換置false,在每趟結束來檢測這個值就好了。code
冒泡排序最好的狀況下是有序的,只進行一趟,即n個數據,則比較次數爲n-1,最壞爲逆序,須要進行n-1趟,每次須要比較n-i(1≤i≤n-1)次。排序
冒泡排序是穩定的,它不會破壞排序中值相同的元素的先後位置。it