算法之冒泡排序和快速排序
Posted 纳木错星空
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法之冒泡排序和快速排序相关的知识,希望对你有一定的参考价值。
package com.sort.test; import java.util.Arrays; import java.util.Random; public class VeriableSort { private static int MAX_NUMBER=10; public static void main(String[] args) { // TODO Auto-generated method stub int[] array = new int[MAX_NUMBER]; Random rand = new Random(); for(int i = 0; i < MAX_NUMBER; i++){ array[i] = rand.nextInt(20); } //原始的数组序列 System.out.println("原始的数组排序如下:"); System.out.println(Arrays.toString(array)); // bubbleSort(array); System.out.println("冒泡排序后的数组排序如下:"); System.out.println(Arrays.toString(array)); quickSort(array,0,array.length-1); System.out.println("快速排序后的数组排序如下:"); System.out.println(Arrays.toString(array)); } /**冒泡排序 * 冒泡排序的核心思想 * 1.排序n-1次,每次排序都通过两辆比较和交换得到本次的最小值放到相应的位置 * 2.第二层循环是j>i,因为前i个已经有序排列了,没必要比较和交换了 * 3.冒泡排序可以优化,当有一次遍历排序的过程中从来没有交换过, * 说明次序列已经有序排序,第一层循环可以退出了,排序结束 * @param array */ private static void bubbleSort(int[] array){ int tmp=0; boolean isSwapFlag = false; for(int i=0 ;i<array.length-1;i++){ for(int j = array.length-1;j>i;j--){ if(array[j-1]>array[j]){ //交换相邻的两个数 tmp = array[j-1]; array[j-1] = array[j]; array[j] = tmp; isSwapFlag=true; } } //如果本次没有交换,说明序列已经按有序排序了 if(!isSwapFlag){ break; } } } /** * 以数组的第一个元素为关键字,比它大的排在它后边,比它小的排在它前边 * * @param array * @param left * @param right * @return */ private static int quickDivide(int[] array ,int left ,int right){ int base =array[left]; while(left < right){ while(left < right && array[right] >= base){ right--; } //找到比关键字小的放在关键字的左边 array[left] = array[right]; while(left < right && array[left] <= base){ left++; } //找到比关键字大的放在关键字的右边 array[right] = array[left]; } //left=right的时候循环退出了,left所指的位置就是关键字所在的位置 array[left] = base; //返回关键字所在的下标 return left; } /**快速排序 * 采用递归的方式进行排序,其实采用的的是分治排序的思维方式 * 以数组的第一个元素为关键字,比它大的排在它后边,比它小的排在它前边 * 然后递归对关键字前后两组序列进行排序 * @param array * @param left * @param right */ private static void quickSort(int[] array ,int left ,int right){ if (left < right){ int base = quickDivide(array,left,right); quickSort(array,left,base-1); quickSort(array,base+1,right); } } }
以上是关于算法之冒泡排序和快速排序的主要内容,如果未能解决你的问题,请参考以下文章