java快速排序

先说下快速排序的思路:选择数组中一个数值pivot,然后从数组两头开始向中间遍历,并与pivot比较,然后进行换子操作,第一次排序执行完了之后,数组以pivot为界,分成了两部分,左边都是比它小的数值,右边都是大于等于它的数值,然后分别对两部分进行递归排序,最终汇总结果,下面是本人根据思路自己写的粗鲁实现,后面是百度百科的资料,它上面的java实现写的很棒,建议大家可以看一看。

本人自己写的拙劣代码

public static void main(String[] args) {
        int[] arr = {4, 2, 1, 5, 6, 7, 8, 3, 9, 10};
        int[] sortedArr = sort(arr);
        List list = convert(sortedArr);
        String str = String.join(",", list);
        System.out.println(str);
    }

    public static int[] sort(@Nonnull int[] arr) {
        int pivot = arr[0];
        int length = arr.length;
        if (length == 1) return arr;
        int midIndex = 0;
        for (int i=length-1; i>0; i--) {
            if (arr[i] < pivot) {
                int j=0;
                for (; j<i; j++) {
                    if (arr[j] > pivot) {
                        int iv = arr[i];
                        int jv = arr[j];
                        arr[i] = jv;
                        arr[j] = iv;
                        break;
                    }
                }
                if (j == i) {
                    int jv = arr[j];
                    arr[0] = jv;
                    arr[j] = pivot;
                    midIndex = i;
                    break;
                }
            }
        }
        int[] lowArr = ArrayUtils.subarray(arr, 0, midIndex + 1);
        int[] highArr = ArrayUtils.subarray(arr, midIndex + 1, length);
        int[] leftArr = sort(lowArr);
        int[] rightArr = sort(highArr);
        return ArrayUtils.addAll(leftArr, rightArr);
    }

    public static List convert(int[] arr) {
        List list = Lists.newArrayList();
        for (int i : arr) {
            list.add(i + "");
        }
        return list;
    }

百度百科上的代码

image.png

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