算法---选择排序

[复制链接]
发表于 2025-1-22 14:05:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
选择排序的思路


  • 在乱序数组中查找到最小元素(升序),存放到起始位置
  • 重复第一步,直到数组有序
代码

  1. class Solution:
  2.     def choose(self, arr):
  3.         n = len(arr)
  4.         for i in range(n - 1):
  5.             min_index = i
  6.             for j in range(i + 1, n):
  7.                 if arr[j] < arr[min_index]:
  8.                     min_index = j
  9.             arr[i], arr[min_index] = arr[min_index], arr[i]
  10.         return arr
  11. if __name__ == "__main__":
  12.     arr = [8, 0, 4, 6, 1, 2, 7, 3, 5, 9]
  13.     s = Solution()
  14.     res = s.choose(arr)
  15.     print(res)
复制代码
优化点

使用双向指针可以进行优化
  1. class Solution:
  2.     def selecttion_sort(self, arr):
  3.         n = len(arr)
  4.         for i in range(n):
  5.             min_index = i
  6.             left = i + 1
  7.             right = n - 1
  8.             while left <= right:
  9.                 if arr[left] < arr[min_index]:
  10.                     min_index = left
  11.                 if arr[right] < arr[min_index]:
  12.                     min_index = right
  13.                 left += 1
  14.                 right -= 1
  15.             arr[i], arr[min_index] = arr[min_index], arr[i]
  16.         return arr
  17. if __name__ == "__main__":
  18.     arr = [8, 0, 4, 6, 1, 2, 7, 3, 5, 9]
  19.     s = Solution()
  20.     res = s.selecttion_sort(arr)
  21.     print(res)
复制代码

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表