冒泡排序
冒泡排序(Bubble Sort)可以称的上是最为经典的排序算法。它的思路比较简单,即从后向前,逐个比较相邻的两项,寻找最优值(最大或最小),使得该值始终向着我们所需要的方向前进,直到最优值达到它的目的地为止。(为方便起见,我这里统一都讨论顺序排序——从小到大排序,即每一轮都寻找最小的元素放在队列的前端位置。)第一轮比较即获得最小的元素放在队列的第一个位置,第二轮比较获得除最小元素外的所剩余的元素的最小值(即次小者)放在队列的第二个位置,以此类推。
下面给出Java代码
package sort.bubble;
public class BubbleSort {
/**
* @param args
*/
public static void main(String[] args) {
//设置元素个数
int count = 0;
//获得随机可重复元素组
//int[] data = createData(count);
//随机不可重复元素组
int[] data = createNoRepeatData(count);
for (int i = 0; i < data.length; i++) {
System.out.print(data[i] + " ");
}
//冒泡排序
bubbleSort(data);
System.out.println("\r\n" + "=================");
for (int i = 0; i < data.length; i++) {
System.out.print(data[i] + " ");
}
}
/**
* 冒泡算法
* @param data
* @return
*/
private static void bubbleSort(int[] data) {
if (null == data || data.length <= 1) {
return;
}
for (int i = 0; i < data.length; i++) {
//从后向前,相邻两项进行比较
for (int j = data.length-1; j > i; j--) {
if(data[j-1]>data[j]){
swap(data,j-1,j);
}
}
}
}
/**
* 数组内 i 坐标元素与 j 坐标元素互换
* @param data
* @param i
* @param j
*/
private static void swap(int[] data, int i, int j) {
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
/**
* 获得随机不可重复数组
* @param data
* @param count
* @return
*/
private static int[] createNoRepeatData(int count) {
int[] data = new int[count];
int randomNum = 0;
boolean isExist = false;
for (int i = 0; i < data.length; i++) {
while (true) {
randomNum = (int) Math.round(Math.random()*count);
isExist = false;
for (int j = 0; j < i; j++) {
if (data[j] == randomNum) {
isExist = true;
break;
}
}
if (!isExist) {
data[i] = randomNum;
break;
}
}
}
return data;
}
/**
* 获得随机可重复数组
* @param data
* @param count
* @return
*/
private static int[] createData(int count) {
int[] data = new int[count];
for (int i = 0; i < data.length; i++) {
data[i] = (int) Math.round(Math.random()*count);
}
return data;
}
}