Python之基本排序演算法的實現

來源:互聯網
上載者:User

標籤:第一個   sel   效果   思想   ret   bsp   方法   複雜   線性   

 1 import cProfile 2 import random 3 class SortAlgorithm: 4     def __init__(self,unsortedlist=[]): 5         self.unsortedlist = unsortedlist or [i for i in random.sample(range(10000),100)] 6         self.length = len(self.unsortedlist) 7  8     def bubble_sort(self): 9         ‘‘‘10         冒泡排序:從第一個元素開始,每每相鄰的兩個元素進行比較,若前者比後者大則交換位置。最後兩個相鄰元素比較完成後,最大的元素形成,11         然後再次從頭開始進行比較,若元素個數為n個,則總共需要進行n-1輪比較就可完成排序。一般情況下演算法複雜度是平方級。12         ‘‘‘13         for i in range(self.length-1):14             for j in range(self.length-i-1):15                 if self.unsortedlist[j]>self.unsortedlist[j+1]:16                     self.unsortedlist[j],self.unsortedlist[j+1] = self.unsortedlist[j+1],self.unsortedlist[j]17                     18         return self.unsortedlist19 20     def selection_sort(self):21         ‘‘‘22         選擇排序:從未排序的序列中找到一個最小的元素,放到第一位,再從剩餘未排序的序列中找到最小的元素,放到第二位,依此類推,直到所有元素都已排序完畢。23         假設序列元素總共n個,則我們需要找n-1輪,就可以使該序列排好序。時間複雜度是平方級。24         ‘‘‘25         for i in range(self.length-1):26             for j in range(i+1,self.length):27                 if self.unsortedlist[i]>self.unsortedlist[j]:28                     self.unsortedlist[i],self.unsortedlist[j] = self.unsortedlist[j],self.unsortedlist[i]29         return self.unsortedlist30 31     def insert_sort(self):32         ‘‘‘33         插入排序:把序列的第一個元素當成已排序列表中的元素,接著從第二個元素開始,與已排序列表中的元素一一比較,並放到合適的位置。假設有n個元素需要排序,則需要n-1輪插入就可排好序。34         時間複雜度為平方級。35         ‘‘‘36         for i in range(1,self.length):37             for j in range(i):38                 if self.unsortedlist[i]<self.unsortedlist[j]:39                     self.unsortedlist.insert(j,self.unsortedlist.pop(i))40                     break41         return self.unsortedlist42 43     def merge_sort(self,lists=None,divid=None):44         ‘‘‘45         歸併排序:歸併排序是約翰·馮·諾伊曼發明,是一種典型的分治法(Divide and Conquer),把一個無序列表一分為二,對每個子序列再一分為二,繼續下去,直到無法再進行劃分為止。46         然後,就開始合并的過程,對每個子序列和另外一個子序列的元素進行比較,依次把小元素放入結果序列中進行合并,最終完成歸併排序。時間複雜度是線性對數級。47         ‘‘‘48         lists = lists or self.unsortedlist49         if len(lists)<=1:50             return lists51         divid = divid or len(lists)//252         left_list = self.merge_sort(lists=lists[:divid])53         right_list = self.merge_sort(lists=lists[divid:])54                                 55         result = []56         l,r=0,057         while len(left_list)>l and len(right_list)>r:58             if left_list[l]<right_list[r]:59                 result.append(left_list[l])60                 l+=161             else:62                 result.append(right_list[r])63                 r+=164         result+=left_list[l:]65         result+=right_list[r:]66         return result67 68     def quick_sort(self,lists=None):69         ‘‘‘70         快速排序:快速排序也是一種分治思想,基本思想是先隨便在無序列表中找一個元素,以這個元素為基準,其他所有元素都跟該元素比,比該元素小的成為一個子序列,比該元素大的成為另一個子序列,71         這樣其中一部分資料都比另一部分小,然後再按照此方法分別進行快速排序,最終達到排序效果。時間複雜度一般為線性對數級。72         ‘‘‘73         lists = lists or self.unsortedlist74         if len(lists)<=1:75             return lists76         small = []77         large = []78         divid = lists.pop(0)79         for each in lists:80             if each<divid:81                 small.append(each)82             else:83                 large.append(each)84         self.quick_sort(small)85         self.quick_sort(large)86         return self.quick_sort(small)+[divid]+self.quick_sort(large)87             88 89 if __name__==‘__main__‘:90     sort = SortAlgorithm()91     #result = sort.bubble_sort()92     #result = sort.selection_sort()93     #result = sort.insert_sort()94     #result = sort.merge_sort()95     result = sort.quick_sort()96     print(result)

 

Python之基本排序演算法的實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.