/*
* 作者:姬灬剌
* 日期: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] + " ");
}
}
}