zoukankan      html  css  js  c++  java
  • 快速排序算法简述及python的实现

     1 def kp(arr, i, j):
     2     if i<j:  #i=j时意味着一边只剩单个数据
     3         base = kpgc(arr, i, j)
     4         kp(arr, i, base-1)  #kp(arr, i, base)也可以,相当于把base放进去重新排了一遍,但是由于base大于左边的,没什么影响
     5         kp(arr, base+1, j)
     6 
     7 def kpgc(arr, i, j):
     8     base = arr[i]   #第一个数字作为基准数字
     9     while i < j:
    10         if arr[j] >= base: #当活动指针j指向数据大于或等于基准数字时,该数据未发生交叉,放右边,
    11             j -= 1      #活动指针同时像左移
    12         if arr[j] < base:   #当活动指针j指向数据小于基准数字时,该数据发生交叉,
    13             arr[i] = arr[j]  #指向数据放左边(此时arr[i]值已被赋给base)
    14             i += 1    #i指针向右移
    15             arr[j] = arr[i]   #为了使活动指针一直在j处,直接将i处值赋到j指针处
    16     arr[i] = base  #将基准数字放至被分两组之间
    17     return i  将基准数字所处的索引(即位置)返回
    18 
    19 arr = [1,3,7,8,5,6,3,4]
    20 kp(arr,0,len(arr)-1)
    21 print(arr)

    快排算法简述:

    1,先从一组数字中任意取一个基准数字(我们以第一个数字为基准数字),将剩下数字以下列方式排在基准数字两侧,左/右侧数字全小/大于基准数字

    方式:除基准数字之外,指针i指向第一个数字位置,指针j指向最后一个数字位置,活动指针最开始指向j,

               若r[j]大于或等于基准数字,则放于基准数字右侧,j指针左移,活动指针仍在j处,

               若小于,则放于左侧,发生交叉位置互换,此时活动指针移到i处(活动指针在哪则比较哪个数字)

    2,再将基准数字两侧数字分别重复1做法直到每侧都为一个数字

    python的实现

    主要靠递归

    为了减少活动指针移动的麻烦,这里使用将i位置的值传送到j处

    ps:所写都是学习笔记,非原创,但理解,不知道为什么代码老是在上面

  • 相关阅读:
    图片的使用
    对话框
    窗体
    浏览器与android移动端视频互播技术实现
    Arcengine实现创建网络数据集札记(三)
    Arcengine实现创建网络数据集札记(二)
    Arcengine实现创建网络数据集札记(一)
    2019年年初iOS招人心得笔记(附面试题)
    2019年,200道面试题打造最受企业欢迎的iOS程序猿!
    BAT面试总结——iOS开发高级工程师
  • 原文地址:https://www.cnblogs.com/zero-16451/p/13547168.html
Copyright © 2011-2022 走看看