冒泡排序

    冒泡排序是基礎的入門算法。它每次將最大的數放到高位,就像氣泡向上同樣。算法比較相連的兩個數,若是大數在前則對調它們,每次產生一個待排序中的最大的數。算法

每次產生最大的一個數,那麼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

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息