(Java学习笔记11) 快速查询

来源:互联网 发布:aes加密mc矩阵 编辑:程序博客网 时间:2024/05/22 03:42
快速排序
 一、快速排序的思想。

* 快速排序通过将一个数组划分成两个子数组,然后通过递归调用自身为

    每一个子数组进行快速排序来进行。

 二、如何进行划分。

* 设定关键字,将比关键字小的数据放在一起,比关键字大的放在另外一组。

 三、如何自动设定关键字

* 设置数组最右端的数据为关键字
四、代码实现快速排序。
public class QuickSort {/* * 划分数组,point为关键字,left、right为数组索引 * */public static int partition(long arr[],int left,int right,long point){int leftPtr=left - 1;int rightPtr=right;while(true){//循环,将比关键字小的留在左端,比关键字大 的留在右端while(leftPtr<rightPtr && arr[++leftPtr]<point);while(rightPtr>leftPtr && arr[--rightPtr]>point);if(leftPtr>=rightPtr){break;//return就是结束该方法,break结束该循环}else{long tmp=arr[leftPtr];arr[leftPtr]=arr[rightPtr];arr[rightPtr]=tmp;}} //将关键字和当前leftPtr所指的这一个进行交换long tmp=arr[leftPtr];arr[leftPtr]=arr[right];arr[right]=tmp;return leftPtr;}public static void displayArr(long[] arr){System.out.print("[");for(long num:arr){System.out.print(num+" ");}System.out.print("]");System.out.println();}public static void sort(long[] arr,int left,int right){if(right-left<=0){return;}else{//设置关键字long point=arr[right];//获得切入点,同时对数组进行划分int partition=partition(arr,left,right,point);System.out.println("partition="+partition);//对左边的子数组进行快速排序sort(arr,left,partition-1);//对右边的子数组进行快速排序sort(arr,partition+1,right);}}}
public class TestQuickSort {public static void main(String[] args){long[] arr=new long[10];for(int i=0;i<10;i++){arr[i]=(long)(Math.random()*99);}QuickSort.displayArr(arr);QuickSort.sort(arr, 0, arr.length-1);QuickSort.displayArr(arr);}}



0 0
原创粉丝点击