python實現排序
#encoding=utf-8
importrandom
fromimport
defdirectInsertSort(seq):
"""直接插入排序"""
size=len(seq)
foriinrange(1,size):
tmp,j=seq[i],i
whilej>0andtmp<seq[j-1]:
seq[j],j=seq[j-1],j-1
seq[j]=tmp
returnseq
defdirectSelectSort(seq):
"""直接選擇排序"""
size=len(seq)
foriinrange(0,size-1):
k=i;j=i+1
whilej<size:
ifseq[j]<seq[k]:
k=j
j+=1
seq[i],seq[k]=seq[k],seq[i]
returnseq
defbubbleSort(seq):
"""冒泡排序"""
size=len(seq)
foriinrange(1,size):
forjinrange(0,size-i):
ifseq[j+1]<seq[j]:
seq[j+1],seq[j]=seq[j],seq[j+1]
returnseq
def_divide(seq,low,high):
"""快速排序劃分函數"""
tmp=seq[low]
whilelow!=high:
whilelow<highandseq[high]>=tmp:high-=1
iflow<high:
seq[low]=seq[high]
low+=1
whilelow<highandseq[low]<=tmp:low+=1
iflow<high:
seq[high]=seq[low]
high-=1
seq[low]=tmp
returnlow
def_quickSort(seq,low,high):
"""快速排序輔助函數"""
iflow>=high:return
mid=_divide(seq,low,high)
_quickSort(seq,low,mid-1)
_quickSort(seq,mid+1,high)
defquickSort(seq):
"""快速排序包裹函數"""
size=len(seq)
_quickSort(seq,0,size-1)
returnseq
defmerge(seq,left,mid,right):
tmp=[]
i,j=left,mid
whilei<midandj<=right:
ifseq[i]<seq[j]:
tmp.append(seq[i])
i+=1
else:
tmp.append(seq[j])
j+=1
ifi<mid:tmp.extend(seq[i:])
ifj<=right:tmp.extend(seq[j:])
seq[left:right+1]=tmp[0:right-left+1]
def_mergeSort(seq,left,right):
ifleft==right:
return
else:
mid=(left+right)/2
_mergeSort(seq,left,mid)
_mergeSort(seq,mid+1,right)
merge(seq,left,mid+1,right)
#二路並歸排序
defmergeSort(seq):
size=len(seq)
_mergeSort(seq,0,size-1)
returnseq
if__name__=='__main__':
s=[random.randint(0,100)foriinrange(0,20)]
prints
print" "
printdirectSelectSort((s))
printdirectInsertSort((s))
printbubbleSort((s))
printquickSort((s))
printmergeSort((s))
② Python對數據進行排序-中英文
sort_values(by,axis=0,ascending=True,inplace=False,kind='quicksort',na_position='last')
參數說明:
by: 可以填入字元串或者字元串組成的列表。也就是說, 如果axis=0,那麼by="列名";如果axis=1,那麼by="行名"。
axis: {0 or 『index』, 1 or 『columns』}, default 0,意思就是如果 axis=0,就按照索引排序,即縱向排序;如果axis=1,則按列排序,即橫向排序。默認是axis=0 。
ascending: 輸入布爾型, True是升序 , False是降序 ,也可以可以是[True,False],即第一個欄位升序,第二個欄位降序 。
inplace : 輸入布爾型,是否用排序後的數據框替換現有的數據框
kind: 排序的方法,{『quicksort』, 『mergesort』, 『heapsort』},默認是使用『quicksort』。這個參數用的比較少,大家可以試一試。
na_position : {『first』, 『last』}, 缺失值的排序 ,也就說決定將缺失值放在數據的最前面還是最後面 。first是排在前面,last是排在後面,默認是用last 。
例子:
scores= pd.DataFrame([[87,56,85],[46,87,97],[34,65,86]],columns=['jack', 'rose', 'mike'])
scores
1.對『rose』這一列進行降序排序:
df_sc=scores.sort_values(by='rose',ascending=False)
df_sc
2.對第0行進行升序排序:
scores.sort_values(by=0,axis=1,ascending=True)
3.第1行進行升序,第0行進行降序:
scores.sort_values(by=[1,0],axis=1,ascending=[True,False]
4.觀察數據
data.head:
查看數據的前五行。
data.tail:
查看數據的後五行。
data.shape :
查看矩陣或數組的維數,或者是說數據表的結構(有幾行幾列)。
data.info :
查看數據的基本信息,如:數據類型、缺失值數量等。
#brand目標:中文-中英-英文
2.1 包含中文,純英文
for i in range(0,len(file1)):
result = re.compile(u'[\u4e00-\u9fa5]')
contents = file1['brand'][i]
match = result.search(contents)
if match:
file1.loc[i,['index1']]=0 #0為包含中文
else:
file1.loc[i,['index1']]=1 #1為純英文
2.1 包含英文,純中文
for i in range(0,len(file1)):
file1.loc[i,['index2']]=len(re.findall('[a-zA-Z]+', file1['brand'][i]) ) #0為純中文,1為包含英文
③ 面試官常問十大經典演算法排序(用Python實現)
演算法是一種與語言無關的東西,更確切地說就算解決問題的思路,就是一個通用的思想的問題。代碼本身不重要,演算法思想才是重中之重
我們在面試的時候總會被問到一下演算法,雖然演算法是一些基礎知識,但是難起來也會讓人非常頭疼。
排序演算法應該算是一些簡單且基礎的演算法,但是我們可以從簡單的演算法排序鍛煉我們的演算法思維。這里我就介紹經典十大演算法用python是怎麼實現的。
十大經典演算法可以分為兩大類:
比較排序: 通過對數組中的元素進行比較來實現排序。
非比較排序: 不通過比較來決定元素間的相對次序。
演算法復雜度
冒泡排序比較簡單,幾乎所有語言演算法都會涉及的冒泡演算法。
基本原理是兩兩比較待排序數據的大小 ,當兩個數據的次序不滿足順序條件時即進行交換,反之,則保持不變。
每次選擇一個最小(大)的,直到所有元素都被輸出。
將第一個元素逐個插入到前面的有序數中,直到插完所有元素為止。
從大范圍到小范圍進行比較-交換,是插入排序的一種,它是針對直接插入排序演算法的改進。先對數據進行預處理,使其基本有序,然後再用直接插入的排序演算法排序。
該演算法是採用 分治法 對集合進行排序。
把長度為n的輸入序列分成兩個長度為n/2的子序列,對這兩個子序列分別採用歸並排序,最終合並成序列。
選取一個基準值,小數在左大數在在右。
利用堆這種數據結構所設計的一種排序演算法。
堆是一個近似完全二叉樹的結構,並同時滿足堆積的性質:即子結點的鍵值或索引總是小於(或者大於)它的父節點。利用最大堆和最小堆的特性。
採用字典計數-還原的方法,找出待排序的數組中最大和最小的元素,統計數組中每個值為i的元素出現的次數,對所有的計數累加,將每個元素放在新數組依次排序。
設置一個定量的數組當作空桶;遍歷輸入數據,並且把數據一個一個放到對應的桶里去;對每個不是空的桶進行排序;從不是空的桶里把排好序的數據拼接起來。
元素分布在桶中:
然後,元素在每個桶中排序:
取得數組中的最大數,並取得位數;從最低位開始取每個位組成新的數組;然後進行計數排序。
上面就是我整理的十大排序演算法,希望能幫助大家在演算法方面知識的提升。看懂之後可以去試著自己到電腦上運行一遍。最後說一下每個排序是沒有調用數據的,大家記得實操的時候要調用。
參考地址:https://www.runoob.com/w3cnote/ten-sorting-algorithm.html
④ python如何對一組數排序
python對一組數排序的方法:
1、使用sorted()方法可以進行升序排序
2、可以operator模塊方法進行多級排序
operator 模塊方法允許多級排序。例如,可以先按 grade 排序,然後再按 age 排序
更多Python知識,請關註:Python自學網!!
⑤ python常見的三種列表排序演算法分別是什麼
排序是計算機程序設計中的一種重要操作,它的功能是將一個數據元素的任意序列,重新排列成一個關鍵字有序的序列。那麼python列表排序演算法有哪些?本文主要為大家講述python中禪棚經常用的三種排序演算法:冒泡排序、插入排序和選擇排序。
1、冒泡排序
冒泡排序,Bubble
Sort,是一種簡單的排序演算法。它重復地遍歷要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。遍歷數列的工作是重復地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢浮到數列的頂端。
2、插入排序
插戚襲差入排序,Insertion
Sort,是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入。插入排序在實現上,在從後向前的掃描過程中,需要把已排序元素逐步向後挪位,為最新元素提供插入空間。
3、選擇高皮排序
選擇排序,Selection
Sort,是一種簡單直觀的排序演算法。它的工作原理如下:首先在未排序序列中找到最小、最大元素,存放到排序序列的起始位置,然後再從剩餘未排序元素中繼續尋找最小、最大元素。放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。
⑥ python中進行字元串排序
python中沒有直接的方法對字元串進行排序,原因是字元串類型是不允許直接修改元素的。
因此字元串排序的主要方法是將字元串轉換成字元數組,
然後散尺借用sorted函數進行排序,
最後用join方法重新拼裝字元串。
輸出結果
我們可以使用sort方法和sorted函數滾陵根據長度進行排序,方法是將鍵作為參數傳遞給排序的方法。
輸出結果
我們可以將任何函數傳遞給key參數。sort方法將根據給定給鍵參數的函數的返回值對列表進行排序。同樣的道理沖備高也適用於排序後的函數。
輸出結果
輸出結果
輸出結果
⑦ python實現字元串列表排序
a = ['b', 'a', 'c', 'ab', 'aa', 'aaa']
a.sort(key=lambda x: str(len(x)) + x)
print(a)
#['a', 'b', 'c', 'aa', 'ab', 'aaa']
⑧ Python中對列表進行排序的方法有哪些呢
python中有兩種排序方法,list內置sort()方法或者python內置的全局sorted()方法
二者區別為:
sort()方法對list排序會修改list本身,不會返回新list。sort()只能對list進行排序。
sorted()方法會返回新的list,保留原來的list。sorted 可以對所有可迭代的對象進行排序操作。
⑨ python 按年份從小到大排序
要按照年份從小到大對Python列表進行排序,可以使用列表的sort()方法,同時指定一個lambda函數來提取年份並進行比較。
以下是示例代碼:
# 定義包含年份的列表
years = [1988, 1999, 1976, 2005, 1968, 2010]
# 使用lambda函數來提取年份並進行比較
years.sort(key=lambda x: x)
# 列印排序後的年份列表
print(years)
在這個示例代碼中,我們首先定義了一個包含年份的列表。然後,我們使用sort()方法來對列櫻橋虧表進行排序,並指定一個lambda函數作為key參數,該函數提取列表中每脊神個元素的年份值進行比較。最後,我們列印排序後的年份列表,以檢查排序是否消唯成功。
輸出結果應該是:
[1968, 1976, 1988, 1999, 2005, 2010]
這表明列表按照年份從小到大進行了排序。
⑩ Python實現的快速排序演算法詳解
Python實現的快速排序演算法詳解
本文實例講述了Python實現的快速排序演算法。分享給大家供大家參考,具體如下:
快速排序基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。
如序列[6,8,1,4,3,9],選擇6作為基準數。從右向左掃描,尋找比基準數小的數字為3,交換6和3的位置,[3,8,1,4,6,9],接著從左向右掃描,尋找比基準數大的數字為8,交換6和8的位置,[3,6,1,4,8,9]。重復上述過程,直到基準數左邊的數字都比其小,右邊的數字都比其大。然後分別對基準數左邊和右邊的序列遞歸進行上述方法。
實現代碼如下:
def parttion(v, left, right):
key = v[left]
low = left
high = right
while low < high:
while (low < high) and (v[high] >= key):
high -= 1
v[low] = v[high]
while (low < high) and (v[low] <= key):
low += 1
v[high] = v[low]
v[low] = key
return low
def quicksort(v, left, right):
if left < right:
p = parttion(v, left, right)
quicksort(v, left, p-1)
quicksort(v, p+1, right)
return v
s = [6, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6]
print("before sort:",s)
s1 = quicksort(s, left = 0, right = len(s) - 1)
print("after sort:",s1)
運行結果:
before sort: [6, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6]
after sort: [1, 2, 2, 3, 4, 4, 5, 6, 6, 8, 9, 11, 15]