【基础算法】快速排序

快速排序的思想是从数组中选定一个元素,将比这个元素小的全部元素放置到数组的一端(具体是右端还是左端需要根据升序还是降序排序而定),比这个元素大的全部元素放到数组的另一端,此时该元素在有序序列中的位置是确定的,接着对剩余两端也进行以上步骤。递归调用这一过程便可以使整个数组有序。

对我来讲,难点在以选定的元素为分界,将比这个元素小的全部元素放置到数组的一端,比这个元素大的全部元素放到数组的另一端。

low,high,array

key=array[low]

while(low<high){

    while(low<high&&array[high]>=key){

            high--

    }

    array[low]=array[high];

    while(low<high&&array[low]<=key){

            low++;

    }

    array[high]=array[low];  

}

array[low]=key

小小的程序段,要注意的点却很多。首先是low<high的判断,只要low和high的位置将要发生变化,那么就需要先判断是否已经达成了low==high的情况。因为实际代码的执行过程中,为了尽量降低时间复杂度和空间复杂度,将数组元素按照值的大小放入对应端的方式是low和high互相赋值,这种方法尤其需要注意的是数组元素的覆盖问题,像示例的伪代码,一开始先将low端第一个元素的值赋给了key,这样low端第一个元素就是可覆盖的,因此我们选择从high端开始进行比较key和数组元素的大小关系,当high端出现不该在high端的值时(不满足array[high]>=key),就可以将这个元素赋值给low端第一个可被覆盖的元素,此时high端的那个元素就又是可覆盖的了,同理就该从low端开始进行比较key和数组元素了,重复以上这个环节,知道low端和high端重合。

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

推荐阅读更多精彩内容

  • 想要变优秀,顺其自然是不可能的你需要做很多,花很多时间,忍耐并且坚持。 快速排序,简称快排,也是初级面试里面被问到...
    黑白咖阅读 4,400评论 0 0
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 10,587评论 0 52
  • 最常见的七大排序算法,整理了下,包括时间复杂度和空间复杂度都做一个详细的解说,希望对需要的人能有所帮助。 /** ...
    PapiAP阅读 2,750评论 0 2
  • 一、数组定义 array() 1、索引数组 在一个变量中,存储一个或多个值。数组中的每一个元素都有一个访问ID,根...
    竹与豆阅读 3,511评论 0 0
  • 花有语,天知否?谢却春风独自开!夏日亦妖娆。将开未开两瓣唇,欲语未语谁人等?不如笑如风。
    水儿眉阅读 955评论 0 0