【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.以此類推,排序完成
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章