A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 棉/mg花/x糖 于 2013-5-26 19:17 编辑

数据结构:用数组实现双向冒泡排序算法(已优化)

注意:算法优化不是很理想,希望哪位大神能继续帮着优化!!谢谢^_^

程序源码如下:
  1. package com.yb.ArrayAndString;

  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;

  5. public class DouBubbleSort {
  6.     static int count = 0;                               //count记录交换趟数
  7.     void douSort(int arr[]) {                           //双向冒泡排序方法
  8.         int i = 0,j,temp,countNum;                      //countNum记录一趟中发生交换的次数
  9.         boolean flag = true;                            //记录是否发生了交换
  10.         int len = arr.length;
  11.         while(flag) {
  12.             flag = false;
  13.             countNum = 0;
  14.             for(j = len-i-2; j >= i; j--) {             //自底向上扫描
  15.                 if(arr[j+1] < arr[j]) {
  16.                     temp = arr[j];
  17.                     arr[j] = arr[j+1];
  18.                     arr[j+1]= temp;
  19.                     flag = true;
  20.                     countNum++;
  21.                 }
  22.             }
  23.             for(j = i+2; j <= len-i-1; j++) {           //自顶向下扫描
  24.                 if(arr[j-1] > arr[j]) {
  25.                     temp = arr[j-1];
  26.                     arr[j-1] = arr[j];
  27.                     arr[j]= temp;
  28.                     flag = true;
  29.                     countNum++;
  30.                 }
  31.             }
  32.             i++;
  33.             if(flag) count++;
  34.             if(countNum <= 1) break;
  35.         }
  36.     }

  37.     public static void main(String[] args) throws IOException {
  38.         // TODO Auto-generated method stub
  39.         BufferedReader keyin = new BufferedReader(new InputStreamReader(System.in));
  40.         String ch;
  41.         int arr[] = new int[8];
  42.         int len = arr.length;
  43.         System.out.println("请从键盘输入8个整数,一行只输入一个数:");
  44.         for(int i = 0; i < len; i++) {
  45.             ch = keyin.readLine();                      //用于读取一个字符串
  46.             arr[i] = Integer.parseInt(ch);              //将字符串类型ch转换成整数类型
  47.         }

  48.         //打印原始数据
  49.         System.out.println("原始数据:");
  50.         for(int i = 0; i < len; i++) {
  51.             System.out.print(" "+arr[i]);
  52.         }
  53.         System.out.println("\n");

  54.         DouBubbleSort p = new DouBubbleSort();
  55.         p.douSort(arr);                                 //实参为数组名
  56.         
  57.         //打印排序结果
  58.         System.out.println("双向冒泡排序结果:");
  59.         for(int i = 0; i < len; i++) {
  60.             System.out.print(" "+arr[i]);
  61.         }
  62.         System.out.println("\n");
  63.         System.out.println("排序趟数:"+count);
  64.     }
  65. }
复制代码
运行结果:


评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 赞一个!

查看全部评分

4 个回复

正序浏览
优化的!好好I!
回复 使用道具 举报
张旺达 发表于 2013-5-26 18:05
沙发~ 哈哈 很认真嘛

^_^"沙发"?有什么具体含义呢?欢迎吐槽啊^_^
回复 使用道具 举报
好样的啊
回复 使用道具 举报
沙发~ 哈哈 很认真嘛{:soso_e179:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马