【python】使用python讲解三种排序:快速排序,冒泡排序,选择排序

1.快速排序

    def fastChoose(self,list,left,right):
     #   left = 0
     #   right = len(list) -1
        key = list[left]
        while (left < right):
            while (left < right and list[right] >= key): //先从右侧开始,与key值比较,一直到小于key值,然后把值赋予list[left];key值
                right = right -1                                     //key值本身一直不变
            list[left] = list[right]
            while (left < right and list[left] <= key):   //右侧变了一次后,换成左边开始与key值比较,一直到大于key值,然后把
                left = left + 1                                       //list[left赋值给list[right].两边轮流与key值比较,直到一轮结束
            list[right] = list[left]
        list[left] = key                                              //一轮结束,把key值赋予list[left]。这时key值到达了正确的位置
        return left
    def fast(self,list,left,right):
        if left < right:
            temp = self.fastChoose(list,left,right)

            self.fast(list,left,temp-1)                     //然后这是key值的左边,再次排序,跟上面的规则一样
            self.fast(list,temp+1,right)                  //这是key值的右侧列表,再次排序
        return list
算法思想:一个数组,[11,2,5,8,1,13,12]
1.设定下标left,right,然后设定一个基准值key(随意设置,一般第一个)
2.先list[right]开始与key比较,小于key了,就把list[right]换到list[left]
3.再从左边开始与key比价,大于key,再换到list[right]
4.key值始终不变,最后left大于等于right时,把key值给list[left]
5.一趟下来,key值到了正确的排序位置。然后比key小的都到了左边,比key大的都到右边
  key为11,[1, 2, 5, 8, 11, 13, 12]
6.然后key两边分别再次排序[1,2,5,8]和[11,13,12]
参考文献:https://www.jianshu.com/p/2b2f1f79984e

2.冒泡排序

    def BubbleSort(self):
        list = [6,5,2,14,4,9,54,14,98,56]
        for j in range(0,len(list)-1):
            for i in range(0,len(list)-1):
                if list[i] > list[i+1]:
                    list[i] , list[i+1] = list[i+1] , list[i]
        print(list)
 算法思想:
1.两两对比,一轮下来,把最大值放到了最右侧,[X,X,X,X,X,X,X,98];
2. 第二轮下来,[X,X,X,X,X,X,X,56,98]
3. 第三轮下来,[X,X,X,X,X,X,54,56,98],以此类推,排序完成

3.选择排序

    def straightSelectSort(self,list):
        for j in range(0,len(list)-1):     
            for i in range(j,len(list)-1):  
                if list[j] > list[i+1]:           
                    list[j] , list[i+1] = list[i+1] , list[j]
        print(list)
 算法思想:
 1.第一轮j=0,取后面所有的值,与第一个对比,然后得到最小值,放第一个list[0]
 2.第二轮j=1,取所后面有的值,与第二个对比,然后得到最小值,放第二个list[1]
 3.以此类推,排序完成
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值