bubble sort详解

来源:互联网 发布:sat 句子合并 知乎 编辑:程序博客网 时间:2024/06/06 02:00

冒泡排序本是大家都很熟悉的一种排序,教科书也到处都是,今天突然在维基百科中看到还有一种优化的 bubble sort算法,不得不感慨是温故知新啊

数据结构 array
算法推演:
这里写图片描述

两种bubble的伪代码

procedure bubbleSort( A : list of sortable items )    n = length(A)    for i = 0 to n - 1         for j = 1 to n-1                       if A[j-1] > A[j] then                swap( A[j-1], A[j] )            end if        end for    end forend procedure//优化后的算法procedure bubbleSort( A : list of sortable items )    n = length(A)    repeat        swapped = false        for i = 1 to n-1 inclusive do            if A[i-1] > A[i] then                swap(A[i-1], A[i])                swapped = true            end if        end for        n = n - 1    until not swappedend procedure
#include <stdio.h>void bubbleSort(int *arr, int length) {    int i, j, tmp;    for (i = 0; i < length - 1; i ++) {        for (j = 0; j < length - i - 1; j++) {            if (arr[j] > arr[j + 1]) {                tmp = arr[j];                arr[j] = arr[j + 1];                arr[j + 1] = tmp;            }        }    }}int main(int argc, char *argv[]) {    int arr[] = {9, 6, 5, 4, 2, 8};    for (int i = 0; i < 6; i++) {        printf("i=%d\n", arr[i]);    }    bubbleSort(arr, 6);    printf("sort ok\n");    for (int i = 0; i < 6; i++) {        printf("i=%d\n", arr[i]);    }    return 0;}
#include <stdio.h>void optimize_bubble(int *arr, int length) {    int i, tmp;    while (1) {        int isSwap = 0;        for (i = 0; i < length - 1; i++) {            if (arr[i] > arr[i + 1]) {                tmp = arr[i];                arr[i] = arr[i + 1];                arr[i + 1] = tmp;                isSwap = 1;            }        }        if (isSwap == 0) {            break;        }    }}int main(int argc, char *argv[]) {    int arr[] = {9, 8, 4, 5,29, 35, 2, 3, 7};    optimize_bubble(arr, 7);    for (int k = 0; k < 7; k++) {            printf("k=%d\n", arr[k]);        }    return 0;}

这里写图片描述

原创粉丝点击