快速排序的java实现
来源:互联网 发布:2016年癌症数据 编辑:程序博客网 时间:2024/05/01 19:26
package Sort;
/*
* 简单的讲快速排序就是一个分治的过程
* 此代码中以首个元素为基准,通过getPiv查找到基准元素的准确位置,将整个数组分成左边全是小于基准元素右边全是大于基准元素的数组
* 递归对左边和右边的子数组进行快速排序
*/
public class QucikSort {
public static void quicksort(int arr[],int left,int right)
{ int pivo;
if(left<right) // 这一个很重要,掉了这个犯了一个栈溢出的错误,其实只有当right-left>3时采用快排才是有效的
{
pivo=getPiv(arr,left,right); //获得基准元素在数组中的准确位置
quicksort(arr,left,pivo-1);
quicksort(arr,pivo+1,right);
}
}
public static int getPiv(int arr[],int left,int right)
{
int pivokey=arr[left]; //以首个元素作为基准元素
while(left<right) // 当left==right处,pivokey在数组中的准确位置找到
{
while(left<right && arr[right]>=pivokey)
right--; // 从右边开始查找第一个小于基准元素的元素位置
if(left<right)
{arr[left++]=arr[right]; // 将右边查找到的小于基准元素的元素移动到左边的left位置处,同时left++
}
while(left<right && arr[left]<=pivokey)
left++; // 从左边的left开始查找第一个大于基准元素的元素位置
if(left<right)
{
arr[right--]=arr[left]; // 将左边的大于基准元素的元素值移动到右边right处
}
}
arr[left]=pivokey; // pivokey移动到准确的位置,(left==right)
return left; // 同时返回基准元素的位置
}
public static void print(int ary[]) // 实现数组的输出
{
int n=ary.length;
for(int i=0;i<n-1;i++)
System.out.print(ary[i]+" ");
System.out.println(ary[n-1]);
}
public static void main(String args[])
{
int arr[]={3,5,7,9,6,4,2,1,8,10,13,16,15,14};
quicksort(arr,0,13);
print(arr);
}
}
- 快速排序的JAVA实现
- 快速排序的Java实现
- 快速排序的java实现
- 快速排序的java实现
- 快速排序的java实现
- 快速排序Java的实现
- java实现的快速排序
- 快速排序的JAVA实现
- 快速排序的java实现
- java实现的快速排序
- 快速排序的java实现
- Java 实现的快速排序
- 快速排序的java实现
- 快速排序的java实现
- java 快速排序的实现
- 快速排序的Java实现
- 快速排序的Java实现
- 快速排序的Java实现
- path和classPath的区别
- 查找链表中倒数第k个元素的方法--c++
- Java Bean属性命名规范问题分析
- 浅析互联网场景的身份认证方法(全本)
- 两个栈形成一个队列的JAVA实现
- 快速排序的java实现
- vs2005直接编译WinCE6.0下的Media Player
- 【学习笔记】mysql索引原理之InnoDB
- java 读写文件参考2
- 如何通过GPS获取我当前所在的城市或街道
- Java 读写文件参考
- 指针问题
- 图像锐化
- Memcached数据被踢(evictions>0)现象分析