Pythonは7つの古典的なソートアルゴリズムを実現
ソートアルゴリズムはC++で何度も書いたのでpythonでもう一度復習しようと思って、くだらないことを言わずに直接コードをつけました.
はい、あなたは6種類しか見ていません.配列操作の面ではC、c++より便利ですが、木にはC++が便利です.スタックのソートはlistシミュレーションで、書くのがおっくうです.コードに誤りがあればご指摘ください
#
def bubbleSort(nums):
for i in range(len(nums) - 1):
for j in range(len(nums) - i - 1):
if nums[j] > nums[j + 1]:
nums[j], nums[j + 1] = nums[j + 1], nums[j]
#
def insertSort(nums):
for i in range(1, len(nums)):
pos = 0
for j in range(i - 1, -1, -1):
if nums[i] > nums[j]:
pos = j + 1
break
temp = nums[i]
for x in range(i, pos - 1, -1):
nums[x] = nums[x - 1]
nums[pos] = temp
#
def shellSort(nums):
step = len(nums)
while True:
step = int(step / 3 + 1)
for n in range(step):
for i in range(n + step, len(nums), step):
pos = n
for j in range(i - step, -1, -step):
if nums[i] > nums[j]:
pos = j + step
break
temp = nums[i]
for x in range(i, pos - step, -step):
nums[x] = nums[x - step]
nums[pos] = temp
if step <= 1:
break
#
def selectionSort(nums):
for i in range(0, len(nums)):
min = i
for j in range(i + 1, len(nums)):
if nums[j] < nums[min]:
min = j
nums[i], nums[min] = nums[min], nums[i]
#
def quicksort(nums, ipos, epos):
if epos - ipos <= 1:
return
beg = ipos
end = epos
while ipos < epos:
while nums[ipos] < nums[epos]:
epos -= 1
nums[ipos], nums[epos] = nums[epos], nums[ipos]
while nums[epos] > nums[ipos]:
ipos += 1
nums[ipos], nums[epos] = nums[epos], nums[ipos]
quicksort(nums, beg, ipos)
quicksort(nums, ipos + 1, end)
#
def mergesort(nums, ipos, epos):
if epos - ipos <= 1:
if nums[ipos] > nums[epos]:
nums[ipos], nums[epos] = nums[epos], nums[ipos]
return
mid = int((epos + ipos) / 2)
mergesort(nums, ipos, mid)
mergesort(nums, mid + 1, epos)
beg = ipos
end = epos
midstart = mid + 1
li = []
while beg <= mid and midstart <= end:
if nums[beg] < nums[midstart]:
li.append(nums[beg])
beg += 1
else:
li.append(nums[midstart])
midstart += 1
if beg <= mid:
li[len(li):] = nums[beg:mid + 1]
else:
li[len(li):] = nums[midstart:epos + 1]
nums[ipos:epos + 1] = li
if __name__ == '__main__':
listnum = [5, 1, 23, 7, 9, 2, 4, 6, 8, 10, 11, 12, 0, 123]
# bubbleSort(listnum)
# insertSort(listnum)
# shellSort(listnum)
# selectionSort(listnum)
# quicksort(listnum, 0, len(listnum) - 1), 4, 6, 8, 10, 11, 12, 0
# mergesort(listnum, 0, len(listnum) - 1)
# print(listnum)
はい、あなたは6種類しか見ていません.配列操作の面ではC、c++より便利ですが、木にはC++が便利です.スタックのソートはlistシミュレーションで、書くのがおっくうです.コードに誤りがあればご指摘ください