萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> 編程語言綜合 >> C語言冒泡排序

C語言冒泡排序

  冒泡排序基本思想

  將n個記錄看作按縱向排列,每趟排序時自下至上對每對相鄰記錄進行比較,若次序不符合要 求(逆序)就交換。每趟排序結束時都能使排序范圍內關鍵字最小的記錄象一個氣泡一樣升到表上端的對應位置,整個排序過程共進行n-1趟,依次將關鍵字最 小、次小、第三小…的各個記錄“冒到”表的第一個、第二個、第三個…位置上。

  初態 第1趟 第2趟 第3趟 第4趟 第5趟 第6趟 第7趟

  38  12  12  12  12  12  12  12

  20  38  20  20  20  20  20  20

  46  20  38  25  25  25  25  25

  38  46  25  38  38  38  38  38

  74  38  46  38  38  38  38  38

  91  74  38  46  46  46  46  46

  12  91  74  74  74  74  74  74

  25  25  91  91  91  91  91  91

  /*

  Title: 冒泡排序

  Author: Li Aimin

  Date: May 2007

  算法功能:冒泡排序算法實現將一個長度為n的線性表r上的所有元素按關鍵字升序排列。

  */

  #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)) /*外循環控制排序的總趟數*/

  { flag=0;

  for(j=n;j>i;j--) /*內循環控制一趟排序的進行*/

  if(r[j]<r[j-1]) /*相鄰元素進行比較,若逆序就交換*/

  {

  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);

  }

copyright © 萬盛學電腦網 all rights reserved