排序算法--冒泡排序

一 、算法介紹

(1)算法概述

排序算法有很多,其中最簡單直接的就是冒泡啦。冒泡排序(Bubble Sort)是一種典型的交換排序通過交換數據元素的位置進行排序。這個算法的名字由來是因為越大的元素會經由交換慢慢“浮”到數列的頂端,故名。

(2)算法原理

  • 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
  • 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最后一對。在這一點,最后的元素應該會是最大的數。
  • 針對所有的元素重復以上的步驟,除了最后一個。
  • 持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較。

(3)算法分析

時間復雜度
  • 若文件的初始狀態是正序的,一趟掃描即可完成排序。所需的關鍵字比較次數C 和記錄移動次數M均達到最小值

    所以,冒泡排序最好的[時間復雜度
  • 若初始文件是反序的,需要進行 n-1 趟排序。每趟排序要進行n-i

    次關鍵字的比較(1≤i≤n-1),且每次比較都必須移動記錄三次來達到交換記錄位置。在這種情況下,比較和移動次數均達到最大值
    冒泡排序的最壞時間復雜度為

    綜上,因此冒泡排序總的平均時間復雜度為
算法穩定性

冒泡排序就是把小的元素往前調或者把大的元素往后調。比較是相鄰的兩個元素比較,交換也發生在這兩個元素之間。所以,如果兩個元素相等,我想你是不會再無聊地把他們倆交換一下的;如果兩個相等的元素沒有相鄰,那么即使通過前面的兩兩交換把兩個相鄰起來,這時候也不會交換,所以相同元素的前后順序并沒有改變,所以冒泡排序是一種穩定排序算法。

二 、算法描述

#include <stdio.h>
#define SIZE 8
void bubble_sort(int a[], int n);
void bubble_sort(int a[], int n)
{
int i, j, temp;
for (j = 0; j < n - 1; j++)
    for (i = 0; i < n - 1 - j; i++)
    {
        if(a[i] > a[i + 1])
        {
            temp = a[i];
            a[i] = a[i + 1];
            a[i + 1] = temp;
        }
    }
}
int main()
{
int number[SIZE] = {95, 45, 15, 78, 84, 51, 24, 12};
int i;
bubble_sort(number, SIZE);
for (i = 0; i < SIZE; i++)
{
    printf("%d", number[i]);
}
printf("\n");
}

結果:12 15 24 45 51 78 84 95

本文參考自百度百科,歡迎指正。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 一、算法簡介 冒泡排序(Bubble Sort)是一種計算機科學最簡單的排序算法之一。 它通過重復地走訪要排序的數...
    likly閱讀 616評論 0 0
  • 基本思想: 冒泡排序是一種交換排序,它的基本思想是:兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序的記錄為...
    史史小子閱讀 666評論 0 0
  • 概述 排序有內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部...
    蟻前閱讀 5,222評論 0 52
  • 平凡人要怎樣才能成功?我認為你要有一顆強者的心!什么叫強者的心?就是做事要有狠勁!要狠,夠狠,更狠,最狠!當你是最...
    曉可以閱讀 365評論 1 2
  • 上海可以說是中國的傳奇城市,它本身是一座移民城市,在長期歷史發展進程中,以其獨特的條件,吸引各方,從一個海隅之鄉發...
    李多余閱讀 818評論 2 0