[color=gray]冒泡排序(BubbleSort):
依次比较相邻的两个数,将小数放在前面,大数放在后面。
冒泡排序的执行过程:
1、比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后;
2、仍从第一对数开始比较,将小数放前,大数放后,一直比较到倒数第二个数;
3、如此下去,重复以上过程,直至最终完成排序。
冒泡排序的优点:
1、“编程复杂度”很低,很容易写出代码;
2、具有稳定性,这里的稳定性是指原序列中相同元素的相对顺序仍然保持到排序后的序列,而堆排序、快速排序均不具有稳定性。[/color]
[color=blue]冒泡排序代码实现:[/color]
[color=green]1、单向冒泡排序[/color]
public class BubbleSort {
@SuppressWarnings("unchecked")
public void sort(Comparable[] data, int start, int end) {
//应用两个循环解决冒泡问题
for (int i = end; i > start; i--) {
//控制整体循环次数
for (int j = start + 1; j <= i; j++) {
//选择出相对最大的数
if (data[j].compareTo(data[j - 1]) < 0) {
swap(data, j, j - 1);
}
}
}
}
//交换数组中两个元素的值
@SuppressWarnings("unchecked")
private void swap(Comparable[] data, int high, int low) {
Comparable temp = data[high];
data[high] = data[low];
data[low] = temp;
}
@SuppressWarnings("unchecked")
public void print(Comparable[] data){
for (int i = 0; i < data.length; i++) {
if (i == data.length - 1) {
System.out.println(data[i]);
} else {
System.out.print(data[i] + ",");
}
}
}
public static void main(String[] args){
BubbleSort bubbleSort = new BubbleSort();
Comparable[] data = { 10, 32, 1, 9, 5, 7, 12, 0, 4, 3 };
bubbleSort.sort(data, 0, data.length-1);
bubbleSort.print(data);
}
}
[color=green]2、双向冒泡排序[/color]
public class DouBubbleSort {
@SuppressWarnings("unchecked")
public void sort(Comparable[] data) {
int i = 1;
int j = data.length - 1;
while (i < j) {
//冒泡选出最大值放入第j个元素
for (int maxj = i; maxj <= j; maxj++) {
if (data[maxj].compareTo(data[maxj - 1]) < 0)
swap(data, maxj, maxj - 1);
}
j--;
//冒泡选出最小值放入第i个元素
for (int mini = j; mini >= i; mini--)
if (data[mini].compareTo(data[mini - 1]) < 0)
swap(data, mini, mini - 1);
i++;
}
}
@SuppressWarnings("unchecked")
private void swap(Comparable[] data, int max, int min) {
Comparable temp = data[max];
data[max] = data[min];
data[min] = temp;
}
@SuppressWarnings("unchecked")
public void print(Comparable[] data) {
for (int i = 0; i < data.length; i++) {
if (i == data.length - 1)
System.out.println(data[i]);
else
System.out.print(data[i] + ",");
}
}
@SuppressWarnings("unchecked")
public static void main(String[] args) {
DouBubbleSort douBubbleSort = new DouBubbleSort();
Comparable[] data = { 10, 32, 1, 9, 5, 7, 12, 0, 4, 3, 16, 12, 14, 325,
678, 342, 321, 200 };
douBubbleSort.sort(data);
douBubbleSort.print(data);
}
}
依次比较相邻的两个数,将小数放在前面,大数放在后面。
冒泡排序的执行过程:
1、比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后;
2、仍从第一对数开始比较,将小数放前,大数放后,一直比较到倒数第二个数;
3、如此下去,重复以上过程,直至最终完成排序。
冒泡排序的优点:
1、“编程复杂度”很低,很容易写出代码;
2、具有稳定性,这里的稳定性是指原序列中相同元素的相对顺序仍然保持到排序后的序列,而堆排序、快速排序均不具有稳定性。[/color]
[color=blue]冒泡排序代码实现:[/color]
[color=green]1、单向冒泡排序[/color]
public class BubbleSort {
@SuppressWarnings("unchecked")
public void sort(Comparable[] data, int start, int end) {
//应用两个循环解决冒泡问题
for (int i = end; i > start; i--) {
//控制整体循环次数
for (int j = start + 1; j <= i; j++) {
//选择出相对最大的数
if (data[j].compareTo(data[j - 1]) < 0) {
swap(data, j, j - 1);
}
}
}
}
//交换数组中两个元素的值
@SuppressWarnings("unchecked")
private void swap(Comparable[] data, int high, int low) {
Comparable temp = data[high];
data[high] = data[low];
data[low] = temp;
}
@SuppressWarnings("unchecked")
public void print(Comparable[] data){
for (int i = 0; i < data.length; i++) {
if (i == data.length - 1) {
System.out.println(data[i]);
} else {
System.out.print(data[i] + ",");
}
}
}
public static void main(String[] args){
BubbleSort bubbleSort = new BubbleSort();
Comparable[] data = { 10, 32, 1, 9, 5, 7, 12, 0, 4, 3 };
bubbleSort.sort(data, 0, data.length-1);
bubbleSort.print(data);
}
}
[color=green]2、双向冒泡排序[/color]
public class DouBubbleSort {
@SuppressWarnings("unchecked")
public void sort(Comparable[] data) {
int i = 1;
int j = data.length - 1;
while (i < j) {
//冒泡选出最大值放入第j个元素
for (int maxj = i; maxj <= j; maxj++) {
if (data[maxj].compareTo(data[maxj - 1]) < 0)
swap(data, maxj, maxj - 1);
}
j--;
//冒泡选出最小值放入第i个元素
for (int mini = j; mini >= i; mini--)
if (data[mini].compareTo(data[mini - 1]) < 0)
swap(data, mini, mini - 1);
i++;
}
}
@SuppressWarnings("unchecked")
private void swap(Comparable[] data, int max, int min) {
Comparable temp = data[max];
data[max] = data[min];
data[min] = temp;
}
@SuppressWarnings("unchecked")
public void print(Comparable[] data) {
for (int i = 0; i < data.length; i++) {
if (i == data.length - 1)
System.out.println(data[i]);
else
System.out.print(data[i] + ",");
}
}
@SuppressWarnings("unchecked")
public static void main(String[] args) {
DouBubbleSort douBubbleSort = new DouBubbleSort();
Comparable[] data = { 10, 32, 1, 9, 5, 7, 12, 0, 4, 3, 16, 12, 14, 325,
678, 342, 321, 200 };
douBubbleSort.sort(data);
douBubbleSort.print(data);
}
}