快速排序
2016-07-10 16:59
183 查看
快速排序
1. 快速排序的思想:
通过将一个数组划分为两个字数组,然后通过递归调用自身为每个字数组进行快速排序来实现。
2. 如何进行划分:
设定关键字,将比关键字小的数据放在一组,比关键字大的放在另一组。
3. 如何自动设定关键字:
设置数组最右端的数据为关键字。
快速排序的实现:
/*
* 快速排序
*/
public
classQuickSort {
/**
* 划分数组
*/
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
classTestQuickSort {
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);
}
}
运行结果:
[7 63 40 63 9 71 61 26 9 21 ]
[7 9 9 21 26 40 61 63 63 71 ]
1. 快速排序的思想:
通过将一个数组划分为两个字数组,然后通过递归调用自身为每个字数组进行快速排序来实现。
2. 如何进行划分:
设定关键字,将比关键字小的数据放在一组,比关键字大的放在另一组。
3. 如何自动设定关键字:
设置数组最右端的数据为关键字。
快速排序的实现:
/*
* 快速排序
*/
public
classQuickSort {
/**
* 划分数组
*/
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
classTestQuickSort {
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);
}
}
运行结果:
[7 63 40 63 9 71 61 26 9 21 ]
[7 9 9 21 26 40 61 63 63 71 ]
相关文章推荐
- 快速排序
- C#快速排序算法实例分析
- C#递归算法之快速排序
- C++快速排序的分析与优化详解
- php快速排序原理与实现方法分析
- js实现数组冒泡排序、快速排序原理
- php简单实现快速排序的方法
- Java 快速排序(QuickSort)原理及实现代码
- 快速排序和分治排序介绍
- java 算法之快速排序实现代码
- Java实现快速排序算法(Quicktsort)
- Java中的数组排序方式(快速排序、冒泡排序、选择排序)
- 快速排序的原理及java代码实现
- C/C++实现快速排序的方法
- c语言实现冒泡排序、希尔排序等多种算法示例
- 深入单链表的快速排序详解
- C++实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等
- JavaScript实现快速排序的方法
- 逐步讲解快速排序算法及C#版的实现示例
- C#使用委托实现的快速排序算法实例