快速排序

首先要理解快速排序的思想:

1.选取一个数字作为基准,可选取末位数字

2.将数列第一位开始,依次与此数字比较,如果小于此数,将小数交换到左边,最后达到小于基准数的在左边,大于基准数的在右边,分为两个数组

3.分别对两个数组重复上述步骤

其中一次排序图示如下:

代码及注意事项如下

#coding:utf-8
class quicksort:
def Quicksort(self,arr,firstindex,lastindex):
if firstindex<lastindex:#初始下标小于末尾下标
divindex=self.partion(arr,firstindex,lastindex)#得到用最后一个元素分割的大小元素的最终位置
self.Quicksort(arr,firstindex,divindex)#注意这两步都是在if条件中
self.Quicksort(arr,divindex+1,lastindex)
else:#注意这块是终止条件,一定要写!!!!!!!!!!!!!
return
def partion(self,arr,firstindex,lastindex):
i=firstindex-1#因为下面的循环每次循环i加1来控制左边的位置的下标,所以初始减1
for j in range(firstindex,lastindex):#不需要循环最后一个元素(因为后面不需要最后一个元素跟他本身比较)
if arr[j]<=arr[lastindex]:#注意还有等于号
i += 1#比较当前元素与最后一个元素的大小,如果当前元素较小,则与前面较大的元素交换,使得较小的元素都在左边
arr[i],arr[j]=arr[j],arr[i]#这种交换元素的写法给跪~很棒
arr[lastindex],arr[i+1]=arr[i+1],arr[lastindex]#注意i要加1,否则前面已经交换过下标为i的元素了。第一个轮换结束后将最后一个元素放到可以分开大小元素的中间
return i


arr = [1, 4, 7, 1, 5, 5, 3, 85, 34, 75, 23, 75, 2, 0]
q=quicksort()
print("initial array:\n", arr)
q.Quicksort(arr, 0, len(arr) - 1)
print("result array:\n", arr)
本文主要的思路参考https://www.cnblogs.com/feichangnice/p/5334195.html,小菜一枚,如侵联删~~~~~~~~~
posted @ 2018-11-02 10:04  巴拉巴拉程序猿  Views(197)  Comments(0Edit  收藏  举报