码迷,mamicode.com
首页 > 编程语言 > 详细

研磨数据结构与算法-09快速排序

时间:2015-09-21 01:52:00      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:java 算法

快速排序:

/*

 * 快速排序

 */

public class QuickSort {


/**

* 划分数组

*/

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;

} 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);

//对左边的子数组进行快速排序

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);

}

}


本文出自 “8159085” 博客,请务必保留此出处http://8169085.blog.51cto.com/8159085/1696506

研磨数据结构与算法-09快速排序

标签:java 算法

原文地址:http://8169085.blog.51cto.com/8159085/1696506

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!