标签:最优 param OLE ring ati static color main 过程
冒泡排序:以从小到大排序为例,就是每一轮排序将数组中最大的值放到数据的最后。
设数组的长度为n:
1、比较前后两个相邻的数据,如果前面的比后面的大,就交换两个数据的位置。
2、这样对数组的第0个数据到第N-1个数据进行遍历后,该数组中最大的值就被放到了数组的第N-1个位置上(也就是数组的末尾)
以上就是冒泡排序的基本思想,根据上面的思路很快就可以写出冒泡排序的代码。
/** * 冒泡排序的第一种实现, 没有任何优化 * @param a * @param n */ public static void bubbleSort1(int [] a, int n){ int i, j; for(i=0; i<n; i++){//表示n次排序过程。 for(j=1; j<n-i; j++){ if(a[j-1] > a[j]){//前面的数字大于后面的数字就交换 //交换a[j-1]和a[j] int temp; temp = a[j-1]; a[j-1] = a[j]; a[j]=temp; } } } }// end
给出一个测试代码: public static void main(String[] args) { int[] arr = {1,1,2,0,9,3,12,7,8,3,4,65,22}; BubbleSort.bubbleSort1(arr, arr.length); for(int i:arr){ System.out.print(i+","); } }
public static void bubbleSort2(int [] a, int n){ int j, k = n; boolean flag = true;//发生了交换就为true, 没发生就为false,第一次判断时必须标志位true。 while (flag){ flag=false;//每次开始排序前,都设置flag为未排序过 for(j=1; j<k; j++){ if(a[j-1] > a[j]){//前面的数字大于后面的数字就交换 //交换a[j-1]和a[j] int temp; temp = a[j-1]; a[j-1] = a[j]; a[j]=temp; //表示交换过数据; flag = true; } } k--;//减小一次排序的尾边界 }//end while }//end
public static void bubbleSort3(int [] a, int n){ int j , k; int flag = n ;//flag来记录最后交换的位置,也就是排序的尾边界 while (flag > 0){//排序未结束标志 k = flag; //k 来记录遍历的尾边界 flag = 0; for(j=1; j<k; j++){ if(a[j-1] > a[j]){//前面的数字大于后面的数字就交换 //交换a[j-1]和a[j] int temp; temp = a[j-1]; a[j-1] = a[j]; a[j]=temp; //表示交换过数据; flag = j;//记录最新的尾边界. } } } }
标签:最优 param OLE ring ati static color main 过程
原文地址:https://www.cnblogs.com/cnzxy/p/9737701.html