C語言冒泡排序

字號(hào):


    冒泡排序基本思想
    將n個(gè)記錄看作按縱向排列,每趟排序時(shí)自下至上對(duì)每對(duì)相鄰記錄進(jìn)行比較,若次序不符合要 求(逆序)就交換。每趟排序結(jié)束時(shí)都能使排序范圍內(nèi)關(guān)鍵字最小的記錄象一個(gè)氣泡一樣升到表上端的對(duì)應(yīng)位置,整個(gè)排序過程共進(jìn)行n-1趟,依次將關(guān)鍵字最 小、次小、第三小…的各個(gè)記錄“冒到”表的第一個(gè)、第二個(gè)、第三個(gè)…位置上。
    初態(tài) 第1趟 第2趟 第3趟 第4趟 第5趟 第6趟 第7趟
    3812121212121212
    2038202020202020
    4620382525252525
    3846253838383838
    7438463838383838
    9174384646464646
    1291747474747474
    2525919191919191
    /*
    Title: 冒泡排序
    Author: Li Aimin
    Date: May 2007
    算法功能:冒泡排序算法實(shí)現(xiàn)將一個(gè)長度為n的線性表r上的所有元素按關(guān)鍵字升序排列。
    */
    #include<stdio.h>
    void bubblesort(int r[],int n)
    { /*elements are stored in r[1] to r[n]*/
    int i,j,flag;
    int temp;
    flag=1;
    i=1;
    while((i<n)&&(flag==1)) /*外循環(huán)控制排序的總趟數(shù)*/
    { flag=0;
    for(j=n;j>i;j--) /*內(nèi)循環(huán)控制一趟排序的進(jìn)行*/
    if(r[j]<r[j-1]) /*相鄰元素進(jìn)行比較,若逆序就交換*/
    {
    flag=1;
    temp=r[j];
    r[j]=r[j-1];
    r[j-1]=temp;
    }
    i++;
    }
    } /*bubblesort*/
    void show(int r[] , int n)
    {
    /*elements are stored in r[1] to r[n]*/
    int i;
    for(i=1;i<=n;i++)
    printf(" %d ",r[i]);
    printf("n");
    }
    void main()
    {
    int a[9201],i;
    for(i=0;i<9201;i++)
    a[i]=9201-i;
    //show(a,100000);
    bubblesort(a,9200);
    show(a,9200);
    }