1.題目,給你一個列表【100,96,98,90】,輸出從大到小排列的位次。要求排序不用庫函數。
#coding=utf-8
import sys
def newsort(list1):
i = 1
listd = {}
for listvalue in list1:
listd[listvalue] = i
i = i + 1
listad = sortpop(list1)
for ite4m in listad:
print(listd[ite4m])
def sortpop(listd):
"""對元素排序"""
n = len(listd)
for j in range(0, n -1 ):
for i in range(0, n - 1 -j):
if listd[i] > listd[i + 1]:
temp = listd[i]
listd[i] = listd[i + 1]
listd[i + 1] = temp
return listd
newsort([100,63,98,97])
2.python分治法實現快速排序:
整體思路:(1)一個指針指右,一個指針指左
(2)左邊第一個數當標杆
(3)當左小與右:
當左指針小於右指針,並且右指針所指比key大: 右指針左移
否則:左小與右時:右賦值給左,左加一
當左小與右,並且左指針所指小於K:左指針右移。
否則:左小與右時:左賦值給右,右加一
否則循環結束,key賦值給left, 返回左。
注意:每一步判斷或者while,都要判斷左小與右。自己不注意,出錯了很多次
def partition(listd, low, high):
"""對元素排序"""
left = low
right = high
k = listd[low]
while left < right:
while listd[right] > k and left < right:
right = right - 1
if left < right:
listd[left] = listd[right]
left = left + 1
while listd[left] < k and left < right:
left = left + 1
if left < right:
listd[right] = listd[left]
right = right - 1
listd[left] = k
return left
def quicksort(listd, low, hight):
if low < hight:
k = partition(listd, low, hight)
quicksort(listd, low, k-1)
quicksort(listd, k + 1, hight)
list1 = [100, 97, 96, 97, 30]
quicksort(list1, 0, 4)
print(list1)