真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python排序算法——快速排序(附代碼)-創(chuàng)新互聯(lián)

python排序算法——快速排序

為禪城等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及禪城網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為成都網(wǎng)站建設、成都網(wǎng)站制作、禪城網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!文章目錄
  • python排序算法——快速排序
  • 一、前言
  • 二、算法描述
  • 三、代碼實現(xiàn)
  • 總結


一、前言

相關知識來自《python算法設計與分析》。初級排序算法是指幾種較為基礎且容易理解的排序算法。初級排序算法包括插入排序、選擇排序和冒泡排序3種。相比起初級排序算法,高級排序算法往往有更加復雜的邏輯,但也會有更高的時間或空間效率。其中有些高級排序算法是由初級排序算法優(yōu)化而來的。本文介紹快速排序。

二、算法描述

快速排序的思想是:取數(shù)組中的一個數(shù)作為基準值,把所有小于基準值的數(shù)都放在它的一側,再把所有大于基準值的數(shù)都放在它的另一側。隨后,對基準值左右兩側的數(shù)組分別進行快速排序。由此可以看出,快速排序的整個排序過程也是遞歸進行的。

快速排序的平均時間復雜度是O(nlgn),最好情況下的時間復雜度是O(nlgn)。最壞情況下,快速排序的時間復雜度可能退化成O( n2 ),但這種情況很少見。它的空間復雜度是O(nlgn)。它是一個不穩(wěn)定的排序算法。如果使用得當,快速排序的速度可以達到歸并排序和堆排序的數(shù)倍,所以快速排序是一種極其常用的算法。

快速排序的流程如圖2-22所示(以升序排序為例)。
在這里插入圖片描述

一般情況下,我們?nèi)?shù)組的第一個數(shù)作為基準進行快速排序。在第一步中,基準數(shù)為5??梢钥闯觯诘诙械臄?shù)組中,比5小的元素:3、4、1、2,都被置于5的左側,而比5大的元素則被置于5的右側。這時,元素5在有序數(shù)組中的位置就確定了。第三行中,我們再取左右兩個無序數(shù)組的第一個數(shù)3和6,分別作為它們的基準數(shù),然后再次對數(shù)組進行分拆。分拆結束之后,3和6在有序數(shù)組中的位置也確定了。接下來,繼續(xù)處理分拆出來的4個子數(shù)組:[1,2]、[4]、[]、[8,7]。其中,一個子數(shù)組只剩一個數(shù),一個為空。這意味著[4]與[]已經(jīng)完成了對自己的快速排序。而其他的兩個子數(shù)組則需繼續(xù)處理。全部處理完畢后,我們將得到一個完整的有序數(shù)組。

可以看出,快速排序也是通過這樣的分治思想來排序的。

三、代碼實現(xiàn)

在QuickSort()函數(shù)中,首先是邊界條件:如果傳入函數(shù)的列表長度小于等于1,那么這一段列表必定是有序的,可以直接返回。如果不滿足邊界條件,則繼續(xù)執(zhí)行函數(shù)。先用key存儲基準值,再定義3個列表存儲小于基準數(shù)的元素llist,大于基準數(shù)的元素rlist和等于基準數(shù)的元素mlist。由于接下來for循環(huán)的范圍不包括列表中的第一個數(shù),所以對mlist初始化時,多加一個初始元素key。

接下來的for循環(huán)把數(shù)組內(nèi)的元素分別歸入3個列表中。隨后,再次調(diào)用QuickSort()函數(shù),對llist和rlist進行排序。這樣,llist和rlist就是有序的了,而mlist內(nèi)的元素剛好處于它們中間的連接部分。所以,排序完成后,把llist、mlist、rlist按順序拼接到一起并輸出。

快速排序代碼(基礎版):

nums = [5,3,6,4,1,2,8,7]
def QuickSort(num):
 if len(num)<= 1: #邊界條件
  return num
 key = num[0] #取數(shù)組的第一個數(shù)為基準數(shù)
 llist,rlist,mlist = [],[],[key] #定義空列表,分別存儲小于/大于/等于基準數(shù)的元素
 for i in range(1,len(num)): #遍歷數(shù)組,把元素歸類到3個列表中
  if num[i] >key:
   rlist.append(num[i])
  elif num[i]< key:
   llist.append(num[i])
  else:
   mlist.append(num[i])
 return QuickSort(llist)+mlist+QuickSort(rlist) #對左右子列表快排,拼接3個列表并返回
print(QuickSort(nums))

運行程序,輸出結果為:

[1,2,3,4,5,6,7,8]

總結

以上就是本文要講的內(nèi)容,本文介紹了快速排序理論知識和代碼實現(xiàn),快速排序的平均時間復雜度是O(nlgn),最好情況下的時間復雜度是O(nlgn)。最壞情況下,快速排序的時間復雜度可能退化成O( n2 ),但這種情況很少見。它的空間復雜度是O(nlgn)。它是一個不穩(wěn)定的排序算法。

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


網(wǎng)站題目:python排序算法——快速排序(附代碼)-創(chuàng)新互聯(lián)
網(wǎng)頁鏈接:http://weahome.cn/article/pgshj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部