快速排序

属于内部排序 交换排序


原理,通过一趟扫描将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列

举个例子

如无序数组[6 2 4 1 5 9]

a. 先把第一项[6]取出来,

用[6]依次与其余项进行比较,

如果比[6]小就放[6]前边,2 4 1 5都比[6]小,所以全部放到[6]前边

如果比[6]大就放[6]后边,9比[6]大,放到[6]后边

一趟排完后变成下边这样:

排序前 6 2 4 1 5 9

排序后 2 4 1 5 6 9

b. 对前半[2 4 1 5]继续进行快速排序

重复步骤a后变成下边这样:

排序前 2 4 1 5

排序后 1 2 4 5

前半排序完成,总的排序也完成:

排序前:[6 2 4 1 5 9]

排序后:[1 2 4 5 6 9]

排序结束

代码

package com.tree;

public class Sort {

int[] numbers = new int[6];

int start ;

int end ;

public Sort(int[] numbers, int start, int end) {

super();

this.numbers = numbers;

this.start = start;

this.end = end;

}

public void say() {

for (int i = 0; i<numbers.length; i++) {

System.out.println(numbers[i]);

}

}

public  void quickSort(int[] numbers, int start, int end) { 

    if (start < end) { 

        int base = numbers[start]; // 选定的基准值(第一个数值作为基准值) 

        int temp; // 记录临时中间值 

        int i = start, j = end; 

        do { 

            while ((numbers[i] < base) && (i < end)) 

                i++; 

            while ((numbers[j] > base) && (j > start)) 

                j--; 

            if (i <= j) { 

                temp = numbers[i]; 

                numbers[i] = numbers[j]; 

                numbers[j] = temp; 

                i++; 

                j--; 

            } 

        } while (i <= j); 

        if (start < j) 

            quickSort(numbers, start, j); 

        if (end > i) 

            quickSort(numbers, i, end); 

    } 

}

//

package com.tree;

public class Quick {

public static void main(String[] args) {

// TODO 自动生成的方法存根

int[] b = {6,2,4,1,5,9};

Sort a = new Sort(b,0,5);

a.quickSort(b,0,5);

a.say();

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。