日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Leetcode】几种简单的排序算法

發布時間:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Leetcode】几种简单的排序算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

冒泡排序

冒泡排序(Bubble Sort) 最為簡單的一種排序,通過重復走完數組的所有元素,通過打擂臺的方式兩個兩個比較,直到沒有數可以交換的時候結束這個數,再到下個數,直到整個數組排好順序。因一個個浮出所以叫冒泡排序。雙重循環時間 O(n^2)

算法步驟

  • 比較相鄰兩個數據如果。第一個比第二個大,就交換兩個數
  • 對每一個相鄰的數做同樣1的工作,這樣從開始一隊到結尾一隊在最后的數就是最大的數。
  • 針對所有元素上面的操作,除了最后一個。
  • 重復1~3步驟,知道順序完成。
  • 可視化

    代碼

    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)

    算法步驟

  • 在一個長度為 N 的無序數組中,第一次遍歷 n-1 個數找到最小的和第一個數交換。
  • 第二次從下一個數開始遍歷 n-2 個數,找到最小的數和第二個數交換。
  • 重復以上操作直到第 n-1 次遍歷最小的數和第 n-1 個數交換,排序完成。
  • 可視化

    代碼

    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】几种简单的排序算法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。