快速排序(python3.7)

依旧基于原本的快速排序思想

将要排序的元素分割为两部分,采用了下面的算法

例如对一串字符'1a2b3c4d5e6f',我们获取其中的字母,将符合条件的元素往前换,同时进行设置count进行计数,最后截取出来

nums_1 = '1a2b3c4d5e6f'
Str = list(nums_1)
count = 0
for i in range(len(nums_1)):
    if not Str[i].isdigit():
        temp = Str[i]
        Str[i] = Str[count]
        Str[count] = temp
        count += 1
print(Str[:count])

运行结果:

['a', 'b', 'c', 'd', 'e', 'f'] 

快速排序代码:

def division(nums, start, end):
   #key必然满足条件,直接跳过,从start+1处开始遍历,
   count = 0
   key = nums[start]
   #相对key进行局部排序
   for i in range(start + 1, end):
      if nums[i] <= key:
         temp = nums[i]
         nums[i] = nums[start + count + 1]
         nums[start + count + 1] = temp
         count += 1
   #将主元放在空位
   for i in range(count):
      nums[start + i] = nums[start + i + 1]
   nums[start + count] = key
   #返回主元下表
   return start + count

def quick_sort(list, first, last):
   if first < last - 1:
      pkindex = division(list, first, last)
      quick_sort(list, first, pkindex)
      quick_sort(list, pkindex + 1, last)
      return list
def package(nums):
   start = 0
   last = len(nums)
   return nums, start, last
if __name__ == '__main__':
   nums = [5, 7, 3, -8, -9, 4, 65, 12, 6, -6, -12, 6]
   nums, start, last = package(nums)
   print(quick_sort(nums, start, last))

运行结果:

[-12, -9, -8, -6, 3, 4, 5, 6, 6, 7, 12, 65]

 

posted @ 2019-01-31 16:55  wxinh  阅读(404)  评论(0编辑  收藏  举报