快速排序
2016-05-12 18:53
429 查看
一、快速排序
快速排序属于交换排序的一种,1962年由C.R.A.Hoare提出,它采用了一种分治的策略,通常称为分治法。
1、算法思想:
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后按照此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序的序列。
2、实现思路
a、以第一个关键字k1为基数,将[k1,k2,k3....Kn]这个数据分成两部分,使左区域所有的值都小于等于k1,右区域所有的值都大于等于k1,最后确定两区域的中间位置,这个时候两个子区域的值处于无序状态。
b、把左区域做为一个整体,用a步骤进行处理,右区域进行相同的处理。(即递归操作)
c、重复a、b步骤,直到处理完毕。
快速排序算法的程序:
public class SortUtils {
public static void quickfastSort(int[] array){
if(array.length > 0){
fastSort(array,0,array.length-1);
}
}
public static void fastSort(int[] array,int low ,int high ){
if(low < high){
int middle=findMiddle2(array,low,high);
fastSort(array, low, middle-1);
fastSort(array, middle+1, high);
}
}
public static int findMiddle(int[] array,int low ,int high){
int temp=array[low];
while(low<high){
while(low<high && temp<array[high]){
high--;
}
array[low]=array[high];
while( low<high && temp>array[low]){
low++;
}
array[high]=array[low];
}
array[low]=temp;
return low;
}
public static int findMiddle2(int[] array,int low ,int high){
int temp=array[low];
while(low<high){
while(temp<array[high]){
high--;
}
if(low<high){
array[low]^=array[high];
array[high]^=array[low];
array[low]^=array[high];
}
while(temp>array[low]){
low++;
}
if(low<high){
array[high]^=array[low];
array[low]^=array[high];
array[high]^=array[low];
}
}
return low;
}
快速排序属于交换排序的一种,1962年由C.R.A.Hoare提出,它采用了一种分治的策略,通常称为分治法。
1、算法思想:
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后按照此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序的序列。
2、实现思路
a、以第一个关键字k1为基数,将[k1,k2,k3....Kn]这个数据分成两部分,使左区域所有的值都小于等于k1,右区域所有的值都大于等于k1,最后确定两区域的中间位置,这个时候两个子区域的值处于无序状态。
b、把左区域做为一个整体,用a步骤进行处理,右区域进行相同的处理。(即递归操作)
c、重复a、b步骤,直到处理完毕。
快速排序算法的程序:
public class SortUtils {
public static void quickfastSort(int[] array){
if(array.length > 0){
fastSort(array,0,array.length-1);
}
}
public static void fastSort(int[] array,int low ,int high ){
if(low < high){
int middle=findMiddle2(array,low,high);
fastSort(array, low, middle-1);
fastSort(array, middle+1, high);
}
}
public static int findMiddle(int[] array,int low ,int high){
int temp=array[low];
while(low<high){
while(low<high && temp<array[high]){
high--;
}
array[low]=array[high];
while( low<high && temp>array[low]){
low++;
}
array[high]=array[low];
}
array[low]=temp;
return low;
}
public static int findMiddle2(int[] array,int low ,int high){
int temp=array[low];
while(low<high){
while(temp<array[high]){
high--;
}
if(low<high){
array[low]^=array[high];
array[high]^=array[low];
array[low]^=array[high];
}
while(temp>array[low]){
low++;
}
if(low<high){
array[high]^=array[low];
array[low]^=array[high];
array[high]^=array[low];
}
}
return low;
}
相关文章推荐
- 快速排序
- C#快速排序算法实例分析
- C++快速排序的分析与优化详解
- js实现数组冒泡排序、快速排序原理
- php简单实现快速排序的方法
- Java 快速排序(QuickSort)原理及实现代码
- 快速排序和分治排序介绍
- java 算法之快速排序实现代码
- Java实现快速排序算法(Quicktsort)
- Java中的数组排序方式(快速排序、冒泡排序、选择排序)
- 快速排序的原理及java代码实现
- C/C++实现快速排序的方法
- c语言实现冒泡排序、希尔排序等多种算法示例
- 深入单链表的快速排序详解
- C++实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等
- JavaScript实现快速排序的方法
- C#使用委托实现的快速排序算法实例
- C语言的冒泡排序和快速排序算法使用实例
- javascript与Python快速排序实例对比
- php实现快速排序的三种方法分享