轰轰烈烈不如平静!

函数应用

上一篇 / 下一篇  2011-03-14 20:35:31

1. 冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
  由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序
 

排序过程

  设想被排序的数组R[1..N]垂直竖立,将每个数据元素看作有重量的气泡,根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上"漂浮",如此反复进行,直至最后任何两个气泡都是轻者在上,重者在下为止;
 

C语言

  程序1:
  void bubble_sort(int array[],int n)
  {
  int i,j,flag,temp;
  for(i = 0; i < n-1; i++)
  {
  flag = 1;
  for(j = 0; j < n-i-1; j++)
  {
  if(array[j] > array[j+1])
  {
  temp = array[j];
  array[j] = array[j+1];
  array[j+1] = temp;
  flag = 0;
  }
  }
  if(1 == flag)
  break;
  printf("%d ",i);
  }
  return;
  }
  程序2:(可进行2个数以上大小比较)
  #include<STDIO.H>
  main()
  {
  long a,x,k,i[100],s;
  char ch;
  for(a=0;;a++)
  {
  printf("输入一个数,输完一个数按回车,最后一个数末尾要加n:");
  scanf("%ld%c",&i[a],&ch);
  if(a==99)
  {
  printf("注意!输入的数超过100个");
  break;
  }
  else if(ch=='n')
  break;
  }
  do{
  x=0;
  for(k=0;k<a;k++)
  {
  if(i[k]>i[k+1])
  {
  s=i[k+1];i[k+1]=i[k];
  i[k]=s;x++;
  }
  }
  }while(x!=0);
  printf("从小到大排列为:");
  for(k=0;k<a;k++)
  printf("%ld<",i[k]);
  printf("%ld",i[a]);
  }

C++

  #include <iostream>
  #define LEN 9
  using namespace std;
  int main()
  {
  int nArray[LEN];
  for(int i=0;i<LEN;i++)nArray[i]=LEN-i;
  cout<<"原始数据为:"<<endl;
  for(int i=0;i<LEN;i++)cout<<nArray[i]<<" ";
  cout<<endl;
  //开始冒泡
  {
  int temp;
  for(int i=LEN-1;i>0;i--)
  for(int j=0;j<i;j++)
  {
  if(nArray[j]>nArray[j+1])
  {
  temp=nArray[j];
  nArray[j]=nArray[j+1];
  nArray[j+1]=temp;
  }
  }
  }
  //结束冒泡
  cout<<"排序结果:"<<endl;
  for(int i=0;i<LEN;i++)cout<<nArray[i]<<" ";
  return 0;
  }
 
 
  

Java

  // 冒泡排序
  public class BubbleSort {
  public static void sort(Comparable[] data) {
  // 数组长度
  int len = data.length;
  for (int i = 0; i < len - 1; i++) {
  // 临时变量
  Comparable temp = null;
  // 交换标志,false表示未交换
  boolean isExchanged = false;
  for (int j = len - 1; j > i; j--) {
  // 如果data[j]小于data[j - 1],交换
  if (data[j].compareTo(data[j - 1]) < 0) {
  temp = data[j];
  data[j] = data[j - 1];
  data[j - 1] = temp;
  // 发生了交换,故将交换标志置为真
  isExchanged = true;
  }// end if
  }// end for
  // 本趟排序未发生交换,提前终止算法,提高效率
  if (!isExchanged) {
  return;
  }// end if
  }// end for
  }// end sort
  public static void main(String[] args) {
  // 在JDK1.5版本以上,基本数据类型可以自动装箱
  // int,double等基本类型的包装类已实现了Comparable接口
  Comparable[] c = { 4, 9, 23, 1, 45, 27, 5, 2 };
  sort(c);
  for (Comparable data : c) {
  System.out.println(data);
  }
  }
  }

TAG:

走上测试道路 引用 删除 依旧执着   /   2011-05-16 09:17:37
5
 

评分:0

我来说两句

日历

« 2024-04-21  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 157722
  • 日志数: 39
  • 书签数: 1
  • 建立时间: 2009-04-21
  • 更新时间: 2020-08-21

RSS订阅

Open Toolbar