1. 程式人生 > >5613-2-氣泡排序

5613-2-氣泡排序

字串的氣泡排序。

P.s.氣泡排序百度百科:

氣泡排序(Bubble Sort),是一種電腦科學領域的較簡單的排序演算法

它重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果他們的順序(如從大到小、首字母從A到Z)錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素已經排序完成。

這個演算法的名字由來是因為越大的元素會經由交換慢慢“浮”到數列的頂端(升序或降序排列),就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣,故名“氣泡排序”。

給出C語言實現如下:

#include <stdio.h>
#include <string.h>

void bubblesort(char string[])
{
    char temp;
    int i,j;
    int n = strlen(string);
    for (i = 0; i < n-1; i++)
    {
        for (j = i+1; j<n; j++)
        {
            if (string [i] > string[j])
            {
                temp = string[i];
                string[i] = string[j];
                string[j] = temp;
            }
        }
    }
}

int main (void) 
{
    char string[] = "the quick brown fox jumps over the lazy dog";
    printf("Before:\"%s\"\n", string);
    bubblesort(string);
    printf("After:\"%s\"\n", string);
    return 0;
}

/*
Before:"the quick brown fox jumps over the lazy dog"
After:"        abcdeeefghhijklmnoooopqrrsttuuvwxyz"
*/

思路很簡單,首先確定首位與第二位字元的大小順序,並通過常見的設定中間變數並進行互相賦值達到小值在前大值在後的排序目的;

其次就是迴圈,對第二位字元與第三位字元(首位與第二位已經完成排序後)進行排序,同樣是將小值排在大值前面;

然後就是迴圈,直到最大的值被排到整個字串的最後一位。(注意,至此只是第一輪排序,因而只有最後一位確定是最大值)

隨後進行第二輪排序。步驟與第一輪排序完全一致。在此輪排序結束後,整個字串第二大的字元將被排到倒數第二位。

然後就是迴圈直到整個字串從小到大正確排序。

舉個簡單的例子,排序的過程如下:

第0步: ‘cba d’

第1步: ‘ba cd’

第2步: ‘a bcd’

第3步: ‘ abcd’

值得注意的是,預設是按照ASCII表進行的。因而,空格被排在了所有字母字元之前。

關於ASCII對照表可參考: