快速排序

来源:互联网 发布:unity3d行走播放动画 编辑:程序博客网 时间:2024/06/16 22:37

package com.wlf.array;public class QuickSort {/* * 快速排序 时间复杂度:O(n)-0(n²) 空间复杂度O(1),需要一个辅助空间作参考。 *  * 可以简单理解为"挖坑填数"+"分治法(递归)"  * 先取一个参考数x,比x小放其左边,反之放右边。(以x参考,相当于在x处挖了个坑,那么就必须填坑) *  * 先由后往前找比x小的,找到后,把这个数放到x位置填坑,此时这个数原来的位置就有了一个坑 * 在由前往后找,找到比x大的,把这个数填到上个数的坑中。 * 依次循环(注意:每次循环从挖过坑的后一位开始),由后往前,挖坑填坑,再又前往后。 * 直到找到与上个数相同的数时停止,把参考数x放到这个数的位置上。 */void quick_sort(int s[], int l, int r)// 返回调整后基准数 l=0,r=s.length的位置 //// (friendly){if (l < r) {// Swap(s[l], s[(l + r) / 2]); //以中间的数作为基准数的,将中间的这个数和第一个数交换int i = l, j = r, x = s[l];while (i < j) {while (i < j && s[j] >= x)// 从右向左找第一个小于x的数j--;if (i < j)s[i++] = s[j];while (i < j && s[i] < x)// 从左向右找第一个大于等于x的数i++;if (i < j)s[j--] = s[i];}s[i] = x;// 递归调用quick_sort(s, l, i - 1);quick_sort(s, i + 1, r);}}//    //test//public static void main(String[] args) {//int[] array = new int[] { 123, 23, 32, 32, 4, 6, 13, 93, 33, 23, 45 };//QuickSort a = new QuickSort();//a.quick_sort(array, 0, 10);//for (int i = 0; i < array.length; i++) {//System.out.print(array[i] + " ");////}////}}



1 0
原创粉丝点击