我的算法日志:排序算法之快速排序
- 快速排序(Quicksort)是对冒泡排序的一种改进,由C. A. R.Hoare在1960年提出。
- 它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
以6、1、7、9、3、8、2、10、3、7
这10个数为例,首先要在这个序列中随便找一个基准数(为了方便,一般都选第一个元素作为基准数),我们现以6为基准数。
接下来操作的目的就是为了让比基准数6大的数放在6的左边,比基准数6小的数放在6的右边。
具体的操作方法是:先从右往左找到第一个小于6的数,在从左往右找到第一个大于6的数,然后交换他们!
java代码实现:
package com.guohao.arithmetics; import java.util.Arrays; import java.util.Scanner; /** * 快速排序 */ public class QuickSort { public static void main(String[] args){ Scanner reader = new Scanner(System.in); int n = reader.nextInt(); //待排序的元素个数 int[] arr = new int[n]; //用于储存待排序元素的数组 //用户从键盘输入待排序元素 for (int i=0; i<n; i++){ arr[i] = reader.nextInt(); } reader.close(); sort(arr, 0, arr.length-1); //调用sort方法对数组arr进行排序 System.out.println("排序后的数组:"+ Arrays.toString(arr)); } /** * 将整型数组arr中的元素从小到大排序 * @param arr * @param left * @param right */ public static void sort(int[] arr, int left, int right){ if(left > right){ return ; } int temp = arr[left]; //基准数temp int i=left, j=right; while(i != j){ while(arr[j]>=temp && i<j){ //从右向左找到一个比temp小的数,记录其下标 j--; } while(arr[i]<=temp && i<j){ //从左向右找到一个比temp大的数,记录其下标 i++; } if(i < j){ //交换两个数的位置 int t = arr[i]; arr[i] = arr[j]; arr[j] = t; } } //使基准数归位 arr[left] = arr[i]; arr[i] = temp; sort(arr, left, i-1); //递归处理基准数左边的元素 sort(arr, i+1, right); //递归处理基准数右边的元素 } }
相关推荐
Masimaro 2020-06-21
清溪算法君老号 2020-06-01
cmsmdn 2020-03-03
Joymine 2020-06-06
GhostLWB 2020-04-20
sunjunior 2020-04-10
shenwenjie 2020-02-26
sunjunior 2020-02-15
hanyujianke 2020-01-13
路漫 2020-01-12
sunnyJam 2019-12-31
KilluaZoldyck 2019-12-15
yuanran0 2019-12-14
Happyunlimited 2019-12-10
baike 2019-12-09
yishujixiaoxiao 2019-12-02
YUAN 2019-11-19
alicelmx 2019-11-12