阅读背景:

java冒泡排序法优化

来源:互联网 

/*
 * 著作:姬灬剌
 * 日期:2016年6月26日
 * 功效:冒泡排序法
 * 总结:
 * 根本思想:通过看待排序序列从后向前(从下表较大的元素开端),顺次比拟相邻元素的排序码,
 * 若发明逆序则交流,使排序码较小的元素逐步从后部移动到前部;
 * 由于在排序进程中,各元素在不停地接近自己的地位,如果一次比拟下来没有产生任何转变,则解释
 * 序列排序完成,故须要在排序进程中设置一个标识flag断定元素是不是交流过,从而减少没必要要的比拟
 * 
 */
package com.st.paixu;

import java.util.Random;

public class maopao {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  // 定义一个int类型的数组,设置长度为length
  int length = 8;
  int[] arr = new int[length];
  // 随机生成arr数组的元素
  for (int i = 0; i < arr.length; i++) {
   arr[i] = new Random().nextInt(10);
  }
  // 实例化一个MpSort类的对象
  MpSort ms1 = new MpSort();
  // 打印数组
  System.out.println("排序前:");
  ms1.printArr(arr);
  ms1.sort(arr);
  System.out.println("\n排序后:");
  ms1.printArr(arr);
 }
}

// 定义一个冒泡排序的类:MpSort
class MpSort {
 public boolean flag = true;

 // 成员办法:排序
 // 外层重复设置排序次数
 // 定义一个游标变量
 public int[] sort(int[] arr) {
  int temp = 0;
  for (int i = 0; i < arr.length - 1; i++) {
   // 内层重复进行地位冒泡
   for (int j = 0; j < arr.length - 1 - i; j++) {
    flag = true;
    if (arr[j] > arr[j + 1]) {
     temp = arr[j];
     arr[j] = arr[j + 1];
     arr[j + 1] = temp;
     flag = false;
    }
   }
   //flag要在外层,即完成一次冒泡后,若flag值不更改成false,则未进入交流代码段,进而跳出重复
   if (flag) {
    break;
   }
   //System.out.println("\n排序中:");
   //printArr(arr);
  }
  return arr;
 }
 // 打印数组
 public void printArr(int[] arr) {
  for (int i = 0; i < arr.length; i++) {
   System.out.print(arr[i] + " ");
  }
 }
}
/*
 * 著作:姬灬剌
 * 日期:2016年6月26日
 * 功效:冒泡排序法
 * 总结:




你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: