快速排序算法
基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都小,然后再按此方法对这两部分数据进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
算法过程:
step1:指定枢纽
step2:通过一趟排序将以枢纽为中心,把待排记录分割为独立的两部分,使得左边记录的关键字小于枢纽值,右边记录的关键字大于枢纽值。
step3:对左右两部分记录序列重复上述过程,依此类推,直到子序列中只剩下一个记录或不含记录为止。
package com.quicksort.yy;
/**
* 快速排序
*@author yuyang_csu
*@data 2013-4-7
*/
public class QuickSort {
//声明待排序的数组
private int [] arr;
//重载构造函数
public QuickSort(int [] arr){
this.arr = arr;
}
//交换数组元素的方法
public void swap(int i ,int j){
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
//创建设置枢纽的方法
public int findKey(int left,int right){
int begin = left;
int mid = (left+right)/2;
int end = right;
if(arr[begin]>arr[mid]){
swap(begin,mid);
}
if(arr[begin]>arr[end]){
swap(begin,end);
}
if(arr[mid]>arr[end]){
swap(mid,end);
}
return arr[mid];
}
//分解数组的方法
public int quickSort(int left,int right){
int tmp = findKey(left,right);
while(left<right){
while(arr[left]<tmp){left++;}
while(arr[right]>tmp){right--;}
swap(left,right);
}
return left;
}
//递归的完成分解排序的方法
public void quick(int left,int right){
int mid;
if(left<right){
mid = quickSort(left,right);
quick(left,mid-1);
quick(mid+1,right);
}
}
//显示数组的方法
public void display(){
for(int i = 0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
public static void main(String[] args) {
int[] arr = {27,38,13,49,76,97,65,69};
QuickSort qs = new QuickSort(arr);
qs.quick(0, arr.length-1);
qs.display();
}
}
快速排序时间复杂度分析:平均时间复杂度O(NlogN),所有内部排序方法中最高好的,大多数情况下总是最好的。
快速排序稳定性分析:快速排序是一个不稳定的算法。
分享到:
相关推荐
知道快速排序算法的思想,但是一直都没有动手写,今天写了下,发现还不是那么容易
快速排序算法,C语言 快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有...
快速排序算法(C经典实例) 快速排序算法(C经典实例) 快速排序算法(C经典实例) 快速排序算法(C经典实例) 快速排序算法(C经典实例)
c语言版本的数据结构的快速排序算法,适用于新手学习
快速排序算法C语言实现,快排序算法QuickSort.cpp
快速排序算法c++实现,快速实现插入排序十万个数(调用)。可以改成输入。并附加了程序运行计时,用于测试时间复杂度,可以移除。绝对能用
给定一个数列,用快速排序算法把它排成升序
C++快速排序算法程序,用于处理大量数据, 并对这些数据进行快速的排序
自己写的用C++实现的快速排序算法,运行通过,可以作为参考。
快速排序算法 word格式 较快速度 MATLAB格式
快速排序算法的精确实现 已经编译通过 在VC++6.0上面
快速排序算法的改进思路 1.选取好的基准,是两边的数据个数尽量的均匀 取数组的第一个,中间,最后一个数据,取三个数中第二大的数作为基准 2. 不递归 3.与插入结合,当段内的数组个数小于等于16的时候,使用...
2、单处理机上快速排序算法 3、快速排序算法的性能 4、快速排序算法并行化 5、描述了使用2m个处理器完成对n个输入数据排序的并行算法。 6、在最优的情况下并行算法形成一个高度为logn的排序树 7、完成快速排序的...
详细解释了快速排序的java实现.里面有代码,还有注释说明
资源名:matlab 实现快速排序算法_一共有主程序,分类,插入和选择四个程序 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能运行可联系我进行指导或者...
JAVA冒泡排序和快速排序算法,符合实验报告要求哦
经测试的C++快速排序算法,可直接运行 源代码
1)不做随机化处理的递归实现; 2)采用随机化处理的递归实现; 3)用while循环消除尾递归; 4)用栈模拟递归,并证明所需的栈空间为O(logn); 5) 够小时改用插入排序