/* * 作者:姬灬剌 * 日期: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] + " "); } } }
java冒泡排序法优化
猜你喜欢
转载自wangzhen-2357.iteye.com/blog/2307423
今日推荐
周排行