一、python算法總結

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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章