【Leetcode】几种简单的排序算法
生活随笔
收集整理的這篇文章主要介紹了
【Leetcode】几种简单的排序算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
冒泡排序
冒泡排序(Bubble Sort) 最為簡單的一種排序,通過重復走完數組的所有元素,通過打擂臺的方式兩個兩個比較,直到沒有數可以交換的時候結束這個數,再到下個數,直到整個數組排好順序。因一個個浮出所以叫冒泡排序。雙重循環時間 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 最大或最小值,再從帶排序的的數中找出最大或最小的交換到對應位置。再選擇次之。雙重循環時間復雜度為 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)是排除穩定性因素后最常用的排序。通過一趟排序將待排記錄分隔成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分的關鍵字小,則可分別對這兩部分記錄繼續進行排序,以達到整個序列有序。
算法步驟
可視化
代碼
def partition(nums, left, right):pivot = nums[left]#初始化一個待比較數據i,j = left, rightwhile(i < j):while(i<j and nums[j]>=pivot): #從后往前查找,直到找到一個比pivot更小的數j-=1nums[i] = nums[j] #將更小的數放入左邊while(i<j and nums[i]<=pivot): #從前往后找,直到找到一個比pivot更大的數i+=1nums[j] = nums[i] #將更大的數放入右邊#循環結束,i與j相等nums[i] = pivot #待比較數據放入最終位置 return i #返回待比較數據最終位置#快速排序 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】大神總結的所有TopK問題模板(基于快速排序)
?【Leetcode】島嶼問題(數量,周長,面積)
?【Leetcode】二分法左側邊界右側邊界模板
總結
以上是生活随笔為你收集整理的【Leetcode】几种简单的排序算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 虚拟邮箱怎么设置方法_腾讯企业邮箱邮件列
- 下一篇: 大数据之HBase教程