【交换排序】快速排序--Java

来源:互联网 发布:软件编程培训业余班 编辑:程序博客网 时间:2024/05/01 13:36

快速排序是由冒泡排序改进而来的 ,其思想是:

--每趟快速排序使表的第一个元素放入适当位置,并将表一分为二,第一份表所有元素比该元素小,而第二份表比该元素大,对这些子表继续进行这种划分,直至所有的子表长度为0或1.

例如:对表{6,8,7,9,0,1,3,2,4,5}进行排序,其过程如下:
































如上图所示,进过7次划分排序成功,也就是进过7次快速排序。下面就来解释一下每一次快速排序的过程及原理:

对于第一次排序,也就是对{6,8,7,9,0,1,3,2,4,5}进行第一次划分
















然后每一次划分都是该种过程,直到排序成功。


代码如下(运行成功):

public class QuickSort { public int sort1(int[] array,int low,int high){int tmp=array[low];while(low<high){while(low<high && tmp<array[high]){high--;}array[low]=array[high];while(low<high && tmp>array[low]){low++;}array[high]=array[low];}array[low]=tmp;return low;}public void sort2(int[] array,int low,int high){if(low<high){int middle=sort1(array,low,high);sort2(array,low,middle-1);sort2(array,middle+1,high);}}    public static void main(String[] args) {        int[] array={6,8,7,9,0,1,3,2,4,5};        sort2(array, 0, array.length-1);        for(int i=0;i<array.length;i++){        System.out.print(array[i]+"\t");        }    }}

因为快速排序的记录移动次数不大于比较的次数,所以快速排序的最坏时间复杂度应为O(n^2),最好时间复杂度为O(n·logn).其空间复杂度为O(logn).

0 0