【Leetcode】几种简单的排序算法
生活随笔
收集整理的這篇文章主要介紹了
【Leetcode】几种简单的排序算法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
冒泡排序
冒泡排序(Bubble Sort) 最為簡單的一種排序,通過重復(fù)走完數(shù)組的所有元素,通過打擂臺的方式兩個兩個比較,直到?jīng)]有數(shù)可以交換的時候結(jié)束這個數(shù),再到下個數(shù),直到整個數(shù)組排好順序。因一個個浮出所以叫冒泡排序。雙重循環(huán)時間 O(n^2)
算法步驟
可視化
代碼
def bubbleSort(nums):for i in range(len(nums)):for j in range(i+1,len(nums)):if nums[j]<nums[i]:tmp = nums[i]nums[i] = nums[j]nums[j] = tmpreturn numsprint(bubbleSort([2,7,3,1,4,6,3,2,5,8,3]))選擇排序
選擇排序(Select Sort) 是直觀的排序,通過確定一個 Key 最大或最小值,再從帶排序的的數(shù)中找出最大或最小的交換到對應(yīng)位置。再選擇次之。雙重循環(huán)時間復(fù)雜度為 O(n^2)
算法步驟
可視化
代碼
def selectSort(nums):for i in range(len(nums)):minIdx = ifor j in range(i+1,len(nums)):if nums[j]<nums[minIdx]:minIdx = jif minIdx != i:tmp = nums[minIdx]nums[minIdx] = nums[i]nums[i] = tmpreturn numsprint(selectSort([2,7,3,1,4,6,3,2,5,8,3]))快速排序
快速排序(QuickSort)是排除穩(wěn)定性因素后最常用的排序。通過一趟排序?qū)⒋庞涗浄指舫瑟毩⒌膬刹糠?#xff0c;其中一部分記錄的關(guān)鍵字均比另一部分的關(guān)鍵字小,則可分別對這兩部分記錄繼續(xù)進行排序,以達到整個序列有序。
算法步驟
可視化
代碼
def partition(nums, left, right):pivot = nums[left]#初始化一個待比較數(shù)據(jù)i,j = left, rightwhile(i < j):while(i<j and nums[j]>=pivot): #從后往前查找,直到找到一個比pivot更小的數(shù)j-=1nums[i] = nums[j] #將更小的數(shù)放入左邊while(i<j and nums[i]<=pivot): #從前往后找,直到找到一個比pivot更大的數(shù)i+=1nums[j] = nums[i] #將更大的數(shù)放入右邊#循環(huán)結(jié)束,i與j相等nums[i] = pivot #待比較數(shù)據(jù)放入最終位置 return i #返回待比較數(shù)據(jù)最終位置#快速排序 def quicksort(nums, left, right):if left < right:index = partition(nums, left, right)quicksort(nums, left, index-1)quicksort(nums, index+1, right)arr = [10,3,2,2,0] quicksort(arr, 0, len(arr)-1) print(arr)猜你喜歡:👇🏻
?【Leetcode】大神總結(jié)的所有TopK問題模板(基于快速排序)
?【Leetcode】島嶼問題(數(shù)量,周長,面積)
?【Leetcode】二分法左側(cè)邊界右側(cè)邊界模板
總結(jié)
以上是生活随笔為你收集整理的【Leetcode】几种简单的排序算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 虚拟邮箱怎么设置方法_腾讯企业邮箱邮件列
- 下一篇: 大数据之HBase教程