python 八大排序快速排序

A、快速排序

1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;

2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];

3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;

4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;

5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。

如列表:

  lst =[6,1,2,7,9,3,4,5,10,8]

[6, 1, 2, 7, 9, 3, 4, 5, 10, 8]
从右向左开始移动第一次
当j移动到5此时lst[j]小于key6
i j 值互换
[5, 1, 2, 7, 9, 3, 4, 6, 10, 8]
从左向右开始移动第一次
当i移动到7此时lst[i]大于key6
i j 值互换
[5, 1, 2, 6, 9, 3, 4, 7, 10, 8]
从右向左开始移动第二次
当j移动到4此时lst[j]小于key6
i j 值互换
[5, 1, 2, 4, 9, 3, 6, 7, 10, 8]
从左向右开始移动第二次
当i移动到9此时lst[i]大于key6
i j 值互换
[5, 1, 2, 4, 6, 3, 9, 7, 10, 8]
从右向左开始移动第三次
当j移动到3此时lst[j]小于key6
i j 值互换
[5, 1, 2, 4, 3, 6, 9, 7, 10, 8]
此时6 刚好在中间

lst分成两部分

左边[5, 1, 2, 4, 3]

右边[9, 7, 10, 8]

重新按照刚刚排序方法

将得到结果
左边[3, 1, 2, 4, 5]

右边[8, 7, 9, 10]

继续排序

.....(递归)

实现方法:

面向过程:

# -*- coding: gbk -*-
__author__ = ‘HZQ‘
lst = [6,1,2,7,9,3,4,5,10,8]
i=0
j=len(lst)-1
key=lst[0]
print(lst)
print("从右向左开始移动第一次")
while lst[j]>=key and j>i:
    j-=1
print("当j移动到{}此时lst[j]小于key{}".format(lst[j],key))
print("i j 值互换")
lst[i],lst[j]=lst[j],lst[i]
print(lst)
print("从左向右开始移动第一次")
while lst[i]<=key and j>i:
    i+=1
print("当i移动到{}此时lst[i]大于key{}".format(lst[i],key))
print("i j 值互换")
lst[i],lst[j]=lst[j],lst[i]

print(lst)
print("从右向左开始移动第二次")
while lst[j]>=key and j>i:
    j-=1
print("当j移动到{}此时lst[j]小于key{}".format(lst[j],key))
print("i j 值互换")

lst[i],lst[j]=lst[j],lst[i]
print(lst)
print("从左向右开始移动第二次")
while lst[i]<=key and j>i:
    i+=1
print("当i移动到{}此时lst[i]大于key{}".format(lst[i],key))
print("i j 值互换")
lst[i],lst[j]=lst[j],lst[i]
print(lst)
print("从右向左开始移动第三次")
while lst[j]>=key and j>i:
        j-=1
print("当j移动到{}此时lst[j]小于key{}".format(lst[j],key))
print("i j 值互换")
lst[i],lst[j]=lst[j],lst[i]
print(lst)

面向对象:

# -*- coding: gbk -*-
__author__ = ‘HZQ‘

lst = [6,1,2,7,9,3,4,5,10,8]
def minddle_index(lst,low,high):
    start_index=low#最左边
    end_index=high#左右边
    if start_index<end_index:#前提条件右边大于左边
        key=lst[start_index]#设置参照key
        while end_index>start_index:
            while lst[end_index]>=key and end_index>start_index:
                end_index-=1
            lst[start_index],lst[end_index]=lst[end_index],lst[start_index]
            while lst[start_index]<=key and end_index>start_index:
                start_index+=1
            lst[start_index],lst[end_index]=lst[end_index],lst[start_index]
        #循环排序,递归
        minddle_index(lst,low,start_index-1)#左边lst再次排序
        minddle_index(lst,end_index+1,high)#右边lst再次排序

minddle_index(lst,0,len(lst)-1)
print(lst)
时间: 2024-11-05 21:36:04

python 八大排序快速排序的相关文章

python八大排序算法

print("冒泡排序") def bubbleSort(input_list): ''' 函数说明:冒泡排序(升序) :param input_lis: 待排序列表 :return:sorted_list :升序排好的列表 ''' if len(input_list) == 0: return [] sorted_list = input_list for i in range(len(sorted_list)-1): bchanged =False # print("第%

Python八大算法的实现,插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序。

Python八大算法的实现,插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的.个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2).是稳定的排序方法.插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素).在第一部分排序完成后,再将这

算法基础——经典八大排序算法的Java及Python实现

概述 八大排序算法不用多说了,程序员算法基础必须要掌握的,现在总结一下加深记忆.下图是这八大排序算法的分类.名称.时间空间复杂度,以及稳定性. 代码 以下是经典八大排序算法的Java及Python代码,都是基于经典算法书籍<算法导论>里的伪代码实现的,我在关键语句部分附上了注释. 按照上图中的顺序分别介绍八大排序算法的实现(升序),前面是Java,后面是Python.Java的排序函数写在了一个类里,Python的排序函数则直接写出来了. 直接插入排序 public class InsertS

Python实现八大排序算法

Python实现八大排序算法,具体内容如下 1.插入排序描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的.个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2).是稳定的排序方法.插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素).在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中. 代码实现 def insert

八大排序算法python实现(转)

一.概述   排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序.堆排序或归并排序序. 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短: 二.算法实现   1.插入排序-直接插入排序(Straight Insertion Sort) 基

Python学习(三) 八大排序算法的实现(下)

本文Python实现了插入排序.基数排序.希尔排序.冒泡排序.高速排序.直接选择排序.堆排序.归并排序的后面四种. 上篇:Python学习(三) 八大排序算法的实现(上) 1.高速排序 描写叙述 通过一趟排序将要排序的数据切割成独立的两部分,当中一部分的全部数据都比另外一部分的全部数据都要小,然后再按此方法对这两部分数据分别进行高速排序,整个排序过程能够递归进行,以此达到整个数据变成有序序列. 1.先从数列中取出一个数作为基准数. 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全

Python实现排序算法之快速排序

Python实现排序算法:快速排序.冒泡排序.插入排序.选择排序.堆排序.归并排序和希尔排序 Python实现快速排序 原理 首先选取任意一个数据(通常选取数组的第一个数)作为关键数据,然后将所有比它小的放到它前面,所有比它大的放到它后面,这个过程称为一趟快速排序 快速排序原理图如下: 实现 #coding=utf-8 #python实现快速排序 def quick_sort(li,start,end): if start < end: flag = li[start] print(flag)

数据结构常见的八大排序算法(详细整理)

https://www.jianshu.com/p/7d037c332a9d?utm_campaign=hugo&utm_medium=reader_share&utm_content=note&utm_source=weixin-friends 八大排序,三大查找是<数据结构>当中非常基础的知识点,在这里为了复习顺带总结了一下常见的八种排序算法.常见的八大排序算法,他们之间关系如下: 排序算法.png 他们的性能比较: 性能比较.png 下面,利用Python分别将他

八大排序算法原理以及Java实现(直接插入排序)

概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序.堆排序或归并排序序. 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短: 1.插入排序-直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到