选择排序的思路
- 在乱序数组中查找到最小元素(升序),存放到起始位置
- 重复第一步,直到数组有序
代码
class Solution:
def choose(self, arr):
n = len(arr)
for i in range(n - 1):
min_index = i
for j in range(i + 1, n):
if arr[j] < arr[min_index]:
min_index = j
arr[i], arr[min_index] = arr[min_index], arr[i]
return arr
if __name__ == "__main__":
arr = [8, 0, 4, 6, 1, 2, 7, 3, 5, 9]
s = Solution()
res = s.choose(arr)
print(res)
优化点
使用双向指针可以进行优化
class Solution:
def selecttion_sort(self, arr):
n = len(arr)
for i in range(n):
min_index = i
left = i + 1
right = n - 1
while left <= right:
if arr[left] < arr[min_index]:
min_index = left
if arr[right] < arr[min_index]:
min_index = right
left += 1
right -= 1
arr[i], arr[min_index] = arr[min_index], arr[i]
return arr
if __name__ == "__main__":
arr = [8, 0, 4, 6, 1, 2, 7, 3, 5, 9]
s = Solution()
res = s.selecttion_sort(arr)
print(res)