算法学习:快速排序

2017-07-14  本文已影响0人  DreamFish
        public int dividerAndChange(int[] args, int start, int end) 
        {   
            //标准值
            int pivot = args[start];
            while (start < end) {
                // 从右向左寻找,一直找到比参照值还小的数值,进行替换
                // 这里要注意,循环条件必须是 当后面的数 小于 参照值的时候
                // 我们才跳出这一层循环
                while (start < end && args[end] >= pivot)
                    end--;
    
                if (start < end) {
                    swap(args, start, end);
                    start++;
                }
    
                // 从左向右寻找,一直找到比参照值还大的数组,进行替换
                while (start < end && args[start] < pivot)
                    start++;
    
                if (start < end) {
                    swap(args, end, start);
                    end--;
                }
            }
    
            args[start] = pivot;
            return start;
        }

        public void quickSort(int[] args, int start, int end) 
        {
            //当分治的元素大于1个的时候,才有意义
            if ( end - start > 1) {
                int mid = 0;
                mid = dividerAndChange(args, start, end);
                // 对左部分排序
                sort(args, start, mid);
                // 对右部分排序
                sort(args, mid + 1, end);
            }
        }

        private void swap(int[] args, int fromIndex, int toIndex) 
        {
            args[fromIndex] = args[toIndex];
        }
上一篇 下一篇

猜你喜欢

热点阅读