冒泡排序

时间复杂度  O(n^2)

package com.sort;
public class BubbleSort { public static void swap(int list[], int i, int j){ int temp; temp = list[i]; list[i] = list[j]; list[j] = temp; } public static void print(int list[]){ for(int i=0;i<list.length;i++){ System.out.println(list[i]); } } public static void sort01(int list[]){ /** * 从前往后冒泡 * 第1次循环(从0到9)找到最大的数放在最后一个位置(9) * 第2次循环(从0到8)找到第2大的数放在倒数第2的位置(8) * 第3次循环(从0到7)找到第2大的数放在倒数第2的位置(7) * 依次类推... * */ for(int i=0;i<list.length-1;i++){ for(int j=0;j<list.length-i-1;j++){ if(list[j] > list[j+1]){ swap(list,j,j+1); } } } } public static void sort02(int list[]){ /** * 从后往前冒泡 * 第1次循环(从9到0)找到最小的数放在第1个位置(0) * 第2次循环(从9到1)找到第2小的数放在第2的位置(1) * 第3次循环(从9到2)找到第3小的数放在第3的位置(2) * 依次类推... * */ for(int i=0;i<list.length-1;i++){ for(int j=list.length-1-1;j>=i;j--){ if(list[j] > list[j+1]){ swap(list,j,j+1); } } } } public static void sort03(int list[]){ /** * 冒泡的优化 * [2,1,3,4,5,6,7,8,9] * 如果序列是这样的 * 刚开始flag=true * 进入循环flag=false * 第1次循环,flag=true,说明这次循环有数据进行了交换 * 循环后结果:[1,2,3,4,5,6,7,8,9] * 进入第2次循环,flag=false,循环结束后没有进行数据交换,说明后者都大于前者,flag还是false * 所以就不用再进行循环了,已经排好序了 * * */ boolean flag = true; for(int i=0;i<list.length-1 && flag;i++){ flag = false; for(int j=list.length-2;j>=i;j--){ if(list[j] > list[j+1]){ swap(list,j,j+1); flag = true; } } } } public static void main(String[] args) { int list0[] = new int[]{3,2,5,6,4,8,7,9,0,1}; // int list1[] = new int[]{9,8,7,6,5,4,3,2,1,0}; // int list2[] = new int[]{2,1,3,4,5,6,7,8,9}; sort01(list0); // sort02(list0); // sort03(list0); print(list0); } }
原文地址:https://www.cnblogs.com/wwzyy/p/6216968.html