zoukankan      html  css  js  c++  java
  • 交换排序 —— 快速排序

    快速排序

    快速排序是在等待排序的n个记录中随机取出一个元素作为基准,比基准小的元素放到基准左边,比基准大的放到基准的右边。

    然后分别对基准两边的子序列进行上一步的操作。递归的进行,直到排序完成。

    可以设置两个游标分别对序列左右两端的元素进行跟踪。以方便和基准比较大小进行移动。

    如图所示,low 和 heigh分别代表序列的两端。

    设置两个游标,初始值均放在两端。

    假设我们取得 基准元素就是该序列的最后一个元素 ,将其放在 一个临时变量上 如:temp  temp=4 

    游标 i 的作用自左向右移动,找出比基准大的元素,

    游标 j 的作用就是自右向左,找到比基准小的元素。

    排序开始:
    率先移动 i  发现 i 当前指向的元素为 8 ,且 8>4 因此把 8 放到序列的最右边,也就是 j 所在的位置。

    i 已经找到了比 基准小的元素,并实现了元素的交换,那么 i 就暂时停在此处 ,移动 j 

    j 当前元素为8,8>4 ,向左移动 j ,j = 6 ,6>4,继续向左移动 j ,j=3 <4, 停止移动 j ,并且把 j 所指向的元素放到 i 的位置,准备移动 i

    向右移动 i ,i =2, 2<4 , 继续向右移动,i=7, 7>4,停止移动 i ,并将 i 所指向的元素放到 j 的位置。准备移动 j

    向左移动 j ,j = 1,1<4, 停止移动 j  将 j 指向的元素放到 i 的位置。准备移动 i

    向右移动 i ,i = 5,5>4 ,停止移动 i, 将 i 所指向的值,放到 j 的位置。向左移动 j 

    向左移动 j ,发现 i == j 停止移动 i 和 j ,该位置即为 基准元素应该在的位置。

    这就是一趟快排的过程。然后分别对基准左右两端递归的进行上述操作。直至完成。

     代码如下:

    def quickSort(A,low,heigh):
        i = low   # 初始化 i 位于最左边
        j = heigh  #初始化 j  位于最右边
        if low< heigh:
            temp = A[j]   # 取最右边为基准
            while i != j:   #只要 i!= j ,就循环的移动 i 和 j
                while i<j and A[i] <=temp:  # 只要 i 比 j 小,且 i 所指向的变量小于基准变量,那么就不断的向右移动 i
                    i +=1
                A[j]= A[i]    #当碰到 比temp 大的变量时,那么就将 当前变量放到 j 所在的位置。
                while j>i and A[j]>=temp:  # 只要 j 比 i 大,且,j 所指向的变量大于 基准变量,那么就不断向左移动 j
                    j -= 1
                A[i]=A[j]   #直到 碰到比temp 小的变量,那么就向 当前变量放到 i 当前的位置。
    
            A[i] = temp   #当 i==j 时,i、j指向了同一个元素。表示i,j都已经对各自半边遍历完成,并实现了大小元素间的互换,当前位置即基准变量应该在的位置。
            quickSort(A,low,i-1) #递归的对 A的左半部分进行以上动作,只是此时A的范围不再是整个序列了,而是 [0 ,i-1] 序列最左边到基准变量左侧元素
            quickSort(A,i+1,heigh)  #递归的对A 的有半部分进行上述动作,此时A的范围为 [i+1,heigh] 基准变量右侧到 序列最右边
            return  A
    
    A=[8,2,7,5,1,3,6,4]
    low=0
    heigh = len(A)-1
    print(quickSort(A,low,heigh))
    View Code
  • 相关阅读:
    内存分配问题
    C++ assert 的一点说明
    强大的stringstream
    C++中随机数
    C++ 中new
    C++ 中string 详解 转载自 博客园
    未命名名字空间
    使用ifstream和getline读取文件内容[c++]
    6.bootstrap练习笔记-缩略图和list-group
    3.bootstrap练习笔记-媒体内容
  • 原文地址:https://www.cnblogs.com/jijizhazha/p/6121650.html
Copyright © 2011-2022 走看看