1. 程式人生 > >練習題005:氣泡排序

練習題005:氣泡排序

題目:給定一組數字,使用氣泡排序將其按升序序列排序。

解題思路:氣泡排序利用兩個巢狀while迴圈完成,內層迴圈每迴圈一次就將找的的最大數已到最後一個位置,此時這個位置就不用管了,再排序前面的數。
圖片來自網路

void swap(int *x, int *y) //交換兩數的位置
{
    *x ^= *y;
    *y ^= *x;
    *x ^= *y;
}

void show(int *arr, int len) //列印陣列
{
    int i = 0;
    for (i = 0; i < len; i++)
    {
        printf("%d ", arr[i]);
    }
    printf
("\n"); } void bubble_sort(int *arr, int len) { int *start = arr; int *end = arr + len - 1; while (arr < end) { int flag = 0; //識別符號 start = arr; //每次都從第一個元素開始 while (start < end) { if (*start > *(start + 1)) { flag = 1
; swap(start, start + 1); } start++; } end--; //一趟冒泡後,把最大數放到最後一個位置,接下來只用排序前面的數。 if (!flag) //如果flag=0,表示這一趟沒進行交換操作,此時已經排列好了,直接退出 return; } } int main() { int arr[] = { 2, 5, 6, 3, 1, 4, 7, 9, 0, 8 }; int len = sizeof(arr) / sizeof(arr[0
]); show(arr, len); bubble_sort(arr, len); show(arr, len); system("pause"); return 0; }

這裡寫圖片描述