一、简介最近在Python上学习经典的8种排序算法,在加强基础知识的同时,也在加强自己的Python技能。 下面简单说明一下快速排序。
快速排序:要排序的数组为A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面。 这个过程称为快速排序。 值得注意的是,快速排序不是一种稳定的排序算法(即多个相同值的相对位置)在算法结束时可能会发生变动。
快速排序算法流程:
Step 1设定1个变量I,j排序开始时,i=0,j=N-1
Step 2 :将第一个数据元素设为关键数据,key=A[0]
从Step 3 :向前搜索j,找到小于第一个密钥的值交换A[j]和A[i]
Step 4 :从I向后搜索I,找到大于第一个key的值并交换A[i]和A[j]
重复步骤3、4直到step5:I=j; (在3,4个步骤中,没有找到符合条件的值。 即,在3中A[j]为key以上,在4中A[i]为key以下的情况下,以成为j=j-1,i=i 1的方式改变j,I的值。 找到符合条件的值进行交换时,I、j指针的位置不变。 另外,i==j的过程一定是I或j-完成时,在该时刻结束循环)。
二、演示排序过程数组:假设用户输入了以下数组:
下标
0 1 2 3 4 5
数据
6 2 7 3 8 9
首先,设i=0、j=5、key=A[0]=6
因为我们需要将所有小于key的数都左移,所以我们开始寻找小于6的数,从j开始左移,逐渐减少变量j的值。 A[3]=3小于6,所以交换下标为0和3的位置,得到的新序列
下标http://www.Sina.com/12http://www.Sina.com/45
数据http://www.Sina.com/27http://www.Sina.com/89
此时i=0、j=3、key=6
接着,寻找大于Key的值,从I向右搜索A[2]=76,将两个位置互换
下标
0http://www.Sina.com/http://www.Sina.com/45
数据
3http://www.Sina.com/http://www.Sina.com/89
此时i=2、j=3、Key=6
上面的两次比较是一个循环,然后递减变量j,重复上面的循环比较。 直到i=j循环结束。
然后,将k两侧的数据进一步分组,分别进行上述过程,直到不能再分组为止。
三. Python是#! /usr/热情的钢笔/python3#-*-coding : utf-8-*-defsub _ sort (lists,low, high ) 3360 key=lists [ low ] whilelowhigh : whilelowhighandlists [ high ]=key 3360 high-=1print (===================print (high=(print ) high ) print ) lists ) whilelowhighandlists [ hon low=print((==========) ) print ) ) low ) print (low ) print (print ) ) high (print ) lists high ) high ) #递归排序quick_sort ) array,low,key_index )的high ) if _ name _=' _ main _ ' : lists=[ 3,5 ]
正文参考:
3358 www.cn blogs.com/yupeng/p/3418253.html