排序算法-快速排序

package sort

/**
快速排序
S = SL + SR
max(SL) <= min(SR)
Sorted(S) = Sorted(SL) + Sorted(SR)
难点在于分
pivot 轴点:(SL) <= pivot <= min(SR) [lo,hi) = [lo,pivot),[pivot],(pivot,hi)
 */
func QuickSort(list []int, start int, end int) {
    //递归基
    if end - start <= 1 {
        return
    }
    pivot := list[start]
    i := start
    j := end-1
    temp := i
    for i < j {
        if temp == i {
            if list[j] < pivot {
                list[temp] = list[j]
                temp = j
                i++
            } else {
                j--
            }
        } else {
            if list[i] > pivot {
                list[temp] = list[i]
                temp = i
                j--
            } else {
                i++
            }
        }
    }
    list[temp] = pivot
    //递归
    QuickSort(list, start, temp)
    QuickSort(list, temp+1, end)
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么是快速排序? 摘自漫画算法: 同冒泡排序一样,快速排序也属于交换排序,通过元素之间的比较和交换位置来达到排序的...
    花逝97阅读 841评论 0 1
  • 1.实现快速排序算法 问题描述给定一个无序数组int[ ] a,使用快速排序算法进行排序。 解题思路对于快速排序,...
    孙树冲阅读 1,375评论 0 1
  • 我的信仰是自由,而快速排序淋漓尽致的体现了这点,加之我最喜欢的编程语言javascript内置的sort算法也是快...
    编码的哲哲阅读 386评论 0 1
  • 对于经典算法,你是否也遇到这样的情形:学时觉得很清楚,可过阵子就忘了? 本系列文章就尝试解决这个问题。 研读那些排...
    pansly阅读 1,541评论 0 1
  • 之所以叫快速排序,是因为快排在实际应用中是表现最好的排序算法。 快速排序采用分治策略对数据进行排序,什么是分治策略...
    JxYoung阅读 651评论 0 0