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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

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

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

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class DouBubbleSort {
    static int count = 0;                               //count记录交换趟数
    void douSort(int arr[]) {                           //双向冒泡排序方法
        int i = 0,j,temp,countNum;                      //countNum记录一趟中发生交换的次数
        boolean flag = true;                            //记录是否发生了交换
        int len = arr.length;
        while(flag) {
            flag = false;
            countNum = 0;
            for(j = len-i-2; j >= i; j--) {             //自底向上扫描
                if(arr[j+1] < arr[j]) {
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1]= temp;
                    flag = true;
                    countNum++;
                }
            }
            for(j = i+2; j <= len-i-1; j++) {           //自顶向下扫描
                if(arr[j-1] > arr[j]) {
                    temp = arr[j-1];
                    arr[j-1] = arr[j];
                    arr[j]= temp;
                    flag = true;
                    countNum++;
                }
            }
            i++;
            if(flag) count++;
            if(countNum <= 1) break;
        }
    }

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

        //打印原始数据
        System.out.println("原始数据:");
        for(int i = 0; i < len; i++) {
            System.out.print(" "+arr);
        }
        System.out.println("\n");

        DouBubbleSort p = new DouBubbleSort();
        p.douSort(arr);                                 //实参为数组名
        
        //打印排序结果
        System.out.println("双向冒泡排序结果:");
        for(int i = 0; i < len; i++) {
            System.out.print(" "+arr);
        }
        System.out.println("\n");
        System.out.println("排序趟数:"+count);
    }
}

点评

发帖的时候将代码放到代码块中,这样又便于别人阅读!  发表于 2014-4-1 23:45

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

2 个回复

倒序浏览
不错  啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马