def bubble_sort(nums):
n, compareCount = len(nums), 0
for i in range(n):
for j in range(1, n-i):
compareCount += 1
if nums[j] < nums[j-1]:
nums[j-1], nums[j] = nums[j], nums[j-1]
print("总交换次数", compareCount)
return nums
def bubble_sort_2(nums):
n, compareCount = len(nums), 0
for i in range(n):
swapFlag = False
for j in range(1, n-i):
compareCount += 1
if nums[j] < nums[j-1]:
swapFlag = True
nums[j], nums[j-1] = nums[j-1], nums[j]
if not swapFlag:
break
print("总交换次数", compareCount)
return nums
- 改进2-每次交换记录最后一次交换的位置,作为下一次循环的边界
def bubble_sort_3(nums):
n, compareCount = len(nums), 0
lastSwapIndex, sortBoundary = 0, n
for i in range(n):
swapFlag = False
for j in range(1, sortBoundary):
compareCount += 1
if nums[j] < nums[j-1]:
nums[j-1], nums[j] = nums[j], nums[j-1]
swapFlag = True
lastSwapIndex = j
sortBoundary = lastSwapIndex
if not swapFlag:
break
print("总交换次数", compareCount)
return nums
def cockTailSort(nums):
n, compareCount = len(nums), 0
for i in range(n//2):
swapFlag = False
for j in range(i+1, n-i):
compareCount += 1
if nums[j] < nums[j-1]:
nums[j], nums[j-1] = nums[j-1], nums[j]
swapFlag = True
for j in range(n-i-1,i, -1):
compareCount += 1
if nums[j] < nums[j-1]:
nums[j], nums[j-1] = nums[j-1], nums[j]
swapFlag = True
if not swapFlag:
break
print("总交换次数", compareCount)
return nums
def cockTailSort_2(nums):
n, compareCount = len(nums), 0
leftBoundary, rightBoundary = 0, n
while leftBoundary < rightBoundary:
lastSwapIndex = leftBoundary
swapFlag = False
for j in range(leftBoundary+1, rightBoundary):
compareCount += 1
if nums[j] < nums[j-1]:
nums[j], nums[j-1] = nums[j-1], nums[j]
swapFlag = True
lastSwapIndex = j
rightBoundary = lastSwapIndex
for j in range(rightBoundary-1, leftBoundary, -1):
compareCount += 1
if nums[j] < nums[j-1]:
nums[j], nums[j-1] = nums[j-1], nums[j]
swapFlag = True
lastSwapIndex = j
leftBoundary = lastSwapIndex
if not swapFlag:
break
print("总交换次数", compareCount)
return nums