常见的算法排序

Posted jacky912

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常见的算法排序相关的知识,希望对你有一定的参考价值。

1.快速排序

  基本实现方法:经过一次排序算法之后,先简单的将数据分为两部分,取一个中间数(一般为第一个元素)以这个中间数为中心,左边的数为比这个数小的数,右边的数为比这个数大的数。

         之后再进行递归算法,分别处理已经分好的以中间数为分界的左右两堆数据。直到找到我们想要的排好序的数组。

  基本方法步骤:1.先确定一个对比数为中间数,(一般为第一个元素)

         2.取两个变量i、j,i为下标的数字为这个数组的第一个元素,j为下标的数字为这个数组的最后一个元素。

         3.首先从后向前进行比较,即最后一个元素与中间数进行比较,如果最后一个元素的值大于第一个元素,j- -,继续进行比较,如果j为下标的元素的值小于第一个元素,将j为下标

          元素的值赋给i为下标的元素。结束这一次比较。

         4.开始从前往后进行比较,如果第一个数的值小于中间值,i++,接着进行比较,如果i为下标的元素的值大于中间数,将这个数字的值赋给j为下标的元素。结束这一次比较。

         5.重复3和4步骤,直到  i>j。

  原理:让指定的元素归位,所谓归位,就是放到它应该放到的位置,(左边的元素比它小,右边的元素比它大),然后对每个元素归为,就完成了排序。

  代码如下:

    

#归位函数
def partition(velue,l,r)                #左右分别指向两端元素
    mid=velue[l]:                         #把左边第一个元素赋值给mid,此时l指向空
    while l < r :                           #左右两个指针不重合就继续 
        while l <r and vulue[r] >= mid :#r指向的元素大于mid,则不交换
           r-=1        #r向左移动一位
        velue[l]=velue[r]#如果r指向的元素小于mid,就放在左边现在为空的位置
        while l <r and velue[r]<=mid: #如果l指向的元素小于mid,则不叫换
           l+=1        #l向右移动一位
        velue[r]=velue[l]   #如果 l 指向的元素大于mid,则交换到右边 
    velue[l]=mid              #最后把最开始拿出来的值放到左右两边重合的位置 
    return l                        #最后返回这个位置

#写好归位函数后就可以递归调用这个函数,实现排序

def q_sort(velue,l,r):
    if l<r:
        mid_velue=partition(velue,l,r)    #找到指定元素的位置
        q_sort(velue,l,mid_velue-1)         #对左边元素排序
        q_sortvelue,mid_velue+1,r)        #对右边元素排序
    return velue

  

 

以上是关于常见的算法排序的主要内容,如果未能解决你的问题,请参考以下文章

基于比较的七种常见排序算法

基于比较的七种常见排序算法

常见排序算法

算法 | Java 常见排序算法(纯代码)

hadoop的mapreduce常见算法案例有几种

数据结构(Java)——No4.常见的排序算法