1.冒泡排序
冒泡排序是一种比较简单的排序算法。算法的原理是:
重复地走访过要排序的数列,一次比较相邻的两个元素,按照规定好的顺序进行比较,如果他们的顺序错误就把他们交换过来。走访数列的工作重复的进行直到没有再需要交换的元素,此时数列的排序已经完成。
核心代码:
1 private static void bubbleSortTest(int arr[]) {
2 int temp = 0;
3 for (int i = 0; i < arr.length-1; i++) {
4 for (int j = arr.length-1; j > i; j--) {
5 if (arr[j-1] > arr[j]) {
6 temp = arr[j-1];
7 arr[j-1] = arr[j];
8 arr[j] = temp;
9 }
10 }
11 }
12 }
以上代码完成的工作是采用冒泡排序从小到大排列一个数组。
在外循环中从前往后读数组,然后在内循环中从后往前比较,相邻的数进行两两比较,若前一个数比它相邻的后一个大,则交换他们的位置。每次外循环一次都把第i小的元素移到了arr[i]的位置,所以内循环中的条件是j>i,因为arr[i]前面的都排好了序。每次从后往前比较时,到了arr[i]就不用再继续了。
当然,上面的核心代码也可以写成以下这种形式:
1 private static void bubbleSortTest2(int arr[]) {
2 int temp = 0;
3 for (int i = arr.length-1; i > 0; i++) {
4 for (int j = 0; j < i; j++) {
5 if (arr[j] < arr[j+1]) {
6 temp = arr[j+1];
7 arr[j+1] = arr[j];
8 arr[j] = temp;
9 }
10 }
11 }
12 }
这里思想跟上面是一样的,都是相邻两个元素的比较。只是bubbleSortTest2(int arr[])是从前往后比较,把最大的数往后移。
冒泡排序java实现的完整代码:
1 public class BubbleSortTest {
2
3 public static void main(String[] args) {
4 int[] intArr;
5 intArr = new int[]{5,4,3,2,1};
6 System.out.println("排序前:");
7 printList(intArr);
8 bubbleSortTest(intArr);
9 System.out.println("排序后:");
10 printList(intArr);
11 }
12 /*冒泡排序核心代码*/
13 private static void bubbleSortTest(int arr[]) {
14 int temp = 0;
15 for (int i = 0; i < arr.length - 1; i++) {
16 for (int j = arr.length - 1; j > i; j--) {
17 if (arr[j - 1] > arr[j]) {
18 temp = arr[j - 1];
19 arr[j - 1] = arr[j];
20 arr[j] = temp;
21 }
22 }
23 }
24 }
25
26 public static void printList(int[] list) {
27 for (int value : list) {
28 System.out.print(value + " ");
29 }
30 System.out.println();
31 }
32 }
2.冒泡排序的优化版
对冒泡排序常见的优化方法是加入一个标志变量changeFlag,用于标志某一趟排序过程中是否有数据交换。
如果进行某一趟排序时并没有进行数据交换,则说明所有元素排序完成,可直接跳出循环,结束排序。
优化代码:
1 public class BubbleSortTest {
2
3 public static void main(String[] args) {
4 int[] intArr;
5 intArr = new int[]{5,4,3,1,7,8,9};
6 System.out.println("排序前:");
7 printList(intArr);
8 bubbleSortTest(intArr);
9 System.out.println("排序后:");
10 printList(intArr);
11 }
12 /*冒泡排序核心代码*/
13 private static void bubbleSortTest(int arr[]) {
14 int temp = 0;
15 boolean changeFlag = false;
16
17 for (int i = 0; i < arr.length - 1; i++) {
18 changeFlag = false;
19 for (int j = arr.length - 1; j > i; j--) {
20 if (arr[j - 1] > arr[j]) {
21 temp = arr[j - 1];
22 arr[j - 1] = arr[j];
23 arr[j] = temp;
24 changeFlag = true; //如果数据进行过交换,把changeFlag置为true
25 }
26 }
27 if(!changeFlag) {
28 break; //没有再进行交换,跳出循环
29 }
30 System.out.print("第" + (i+1) + "次排序结果:");
31 printList(arr);
32 }
33 }
34
35 public static void printList(int[] list) {
36 for (int value : list) {
37 System.out.print(value + " ");
38 }
39 System.out.println();
40 }
41 }
运行结果:

另外,这里补充一个通过控制台输入数组进行排序的代码:
1 import java.util.Scanner;
2 public class BubbleSort {
3
4 public static void main(String[] args) {
5 Scanner sc = new Scanner(System.in);
6 System.out.println("请输入要冒泡排序的整数,在同一行以空格隔开:");
7 String intStr = sc.nextLine();
8
9 String[] strArr = intStr.split(" ");
10 int[] intArr = new int[strArr.length];
11
12 for (int i = 0; i < strArr.length; i++) {
13 intArr[i] = Integer.parseInt(strArr[i]);
14 }
15 bubbleSortTest(intArr);
16 System.out.println("排序后:");
17 printList(intArr);
18 }
19
20 private static void bubbleSortTest(int arr[]) {
21 int temp = 0;
22 boolean changeFlag = false;
23
24 for (int i = 0; i < arr.length-1; i++) {
25 changeFlag = false;
26 for (int j = arr.length-1; j > i; j--) {
27 if (arr[j-1] > arr[j]) {
28 temp = arr[j-1];
29 arr[j-1] = arr[j];
30 arr[j] = temp;
31 changeFlag = true;
32 }
33 }
34 if (!changeFlag) {
35 break;
36 }
37 System.out.print("第" + (i+1) + "次排序结果:");
38 printList(arr);
39 }
40 }
41
42 public static void printList(int[] list) {
43 for (int value : list) {
44 System.out.print(value + " ");
45 }
46 System.out.println();
47 }
48 }
来源:http://www.cnblogs.com/ihaveastory/p/5941528.html