冒泡排序和快速排序都属于选择排序,是两种比较简单和比较好理解的排序方法,这两种方法一定要会。
冒泡排序
原理:两两比较,把较大的数放在后面,一趟比较下来,最大的数就在最后面了。
def bubbleSort(nums):
for i in range(1, len(nums)):
for j in range(1, len(nums)-i+1):
if nums[j]<=nums[j-1]:
nums[j], nums[j-1] = nums[j-1], nums[j]
return nums
nums = list(map(int, input().strip().split()))
res = bubbleSort(nums)
print(' '.join(map(str, res)))
快速排序
原理:找一个数字作为基准,一般选取第一个数,定义 i 和 j ,j 从后向前走,当遇到 nums[j] < 基准 的时候,j 停。i 从前向后走,当遇到 nums[i] > 基准 的时候,i停,交换 nums[i] 与 nums[j] ,继续重复上面的步骤,直到 i=j 。再把nums[i] 与基准交换, 这时nums以nums[i] 为中点分为两部分,nums[i]左边的全小于nums[i], nums[i]右边全大于nums[i]。剩下的两部分再重复上面的方法进行排序(递归)。
def quickSort(nums, start, end):
i, j = start, end
if start<end:
base = nums[start]
while i<j:
while i<j and nums[j]>=base:
j -= 1
while i<j and nums[i]<=base:
i += 1
nums[i], nums[j] = nums[j], nums[i]
nums[i], nums[start] = nums[start], nums[i]
quickSort(nums, start, i-1)
quickSort(nums, i+1, end)
return nums
nums = list(map(int, input().strip().split()))
res = quickSort(nums, 0, len(nums)-1)
print(' '.join(map(str, res)))