關(guān)于Python排序問題(冒泡/選擇/插入)
前言:
學(xué)過(guò)C語(yǔ)言肯定接觸過(guò)排序問題,我們最常用的也就是冒泡排序、選擇排序、插入排序……等等,同樣在Python中也有排序問題,這里我也會(huì)講解Python中冒泡排序、選擇排序和插入排序的寫法和思維,上正文!
(這里我是以列表作為一個(gè)排序?qū)ο螅?/p>
1.冒泡排序
冒泡排序(Bubble Sort,臺(tái)灣譯為:泡沫排序或氣泡排序)是一種簡(jiǎn)單的排序算法。它重復(fù)地走訪過(guò)要排序的數(shù)列,一次比較兩個(gè)元素,如果他們的順序錯(cuò)誤就把他們交換過(guò)來(lái)。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就是說(shuō)該數(shù)列已經(jīng)排序完成。
這個(gè)算法的名字由來(lái)是因?yàn)樵酱蟮脑貢?huì)經(jīng)由交換慢慢“浮”到數(shù)列的頂端,故名。

import random as r
#寫入數(shù)據(jù)
def add(li=[]):
num=int(input(''))
if num==-1:
return li
li.append(num)
return add(li)
#排序
def bubble(li):
for i in range(0,len(li)):
for j in range(0,len(li)-i-1):
if li[j]>li[j+1]:
li[j]=li[j]^li[j+1]
li[j+1]=li[j]^li[j+1]
li[j] = li[j] ^ li[j + 1]
return li
if __name__=='__main__':
#輸入:
l=add()
r.shuffle(l)
print('排序前:',l)
newlist2=bubble(l)
print('2.排序后:',newlist2)2.選擇排序
選擇排序(Selection sort)是一種簡(jiǎn)單直觀的排序算法。它的工作原理是每一次從待排序的數(shù)據(jù)元素中選出最小(或最大)的一個(gè)元素,存放在序列的起始位置,直到全部待排序的數(shù)據(jù)元素排完。 選擇排序是不穩(wěn)定的排序方法(比如序列[5, 5, 3]第一次就將第一個(gè)[5]與[3]交換,導(dǎo)致第一個(gè)5挪動(dòng)到第二個(gè)5后面)。

import random as r
#寫入數(shù)據(jù)
def add(li=[]):
num=int(input(''))
if num==-1:
return li
li.append(num)
return add(li)
#選擇排序
def choose(li):
for i in range(0,len(li)-1):
for j in range(i+1,len(li)):
if li[i]>li[j]:
li[j] = li[j] ^ li[i]
li[i] = li[j] ^ li[i]
li[j] = li[j] ^ li[i]
return li
if __name__=='__main__':
#輸入:
l=add()
r.shuffle(l) #打亂列表的順序
print('排序前:',l)
newlist3=choose(l)
print('3.排序后:',newlist3)3.插入排序
有一個(gè)已經(jīng)有序的數(shù)據(jù)序列,要求在這個(gè)已經(jīng)排好的數(shù)據(jù)序列中插入一個(gè)數(shù),但要求插入后此數(shù)據(jù)序列仍然有序,這個(gè)時(shí)候就要用到一種新的排序方法--插入排序法,插入排序的基本操作就是將一個(gè)數(shù)據(jù)插入到已經(jīng)排好序的有序數(shù)據(jù)中,從而得到一個(gè)新的、個(gè)數(shù)加一的有序數(shù)據(jù),算法適用于少量數(shù)據(jù)的排序,時(shí)間復(fù)雜度為O(n^2)。是穩(wěn)定的排序方法。插入算法把要排序的數(shù)組分成兩部分:第一部分包含了這個(gè)數(shù)組的所有元素,但將最后一個(gè)元素除外(讓數(shù)組多一個(gè)空間才有插入的位置),而第二部分就只包含這一個(gè)元素(即待插入元素)。在第一部分排序完成后,再將這個(gè)最后元素插入到已排好序的第一部分中。
插入排序的基本思想是:每步將一個(gè)待排序的紀(jì)錄,按其關(guān)鍵碼值的大小插入前面已經(jīng)排序的文件中適當(dāng)位置上,直到全部插入完為止。

import random as r
#寫入數(shù)據(jù)
def add(li=[]):
num=int(input(''))
if num==-1:
return li
li.append(num)
return add(li)
#插入排序
def insert(li):
for i in range(1,len(li)):
num=li[i]
j=i-1
while j>=0 and li[j]>num:
li[j+1]=li[j]
li[j]=num
j+=1
return li
if __name__=='__main__':
#輸入:
l=add()
r.shuffle(l) #打亂列表的順序
print('排序前:',l)
newlist4=insert(l)
print('4.排序后:',newlist4)到此這篇關(guān)于關(guān)于Python排序問題(冒泡/選擇/插入)的文章就介紹到這了,更多相關(guān)Python排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Pandas過(guò)濾dataframe中包含特定字符串的數(shù)據(jù)方法
今天小編就為大家分享一篇Pandas過(guò)濾dataframe中包含特定字符串的數(shù)據(jù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
python實(shí)現(xiàn)地牢迷宮生成的完整步驟
這篇文章主要給大家介紹了關(guān)于python實(shí)現(xiàn)地牢迷宮生成的相關(guān)資料,文中通過(guò)示例代碼將實(shí)現(xiàn)的過(guò)程一步步介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2021-09-09
win10從零安裝配置pytorch全過(guò)程圖文詳解
這篇文章主要介紹了win10從零安裝配置pytorch全過(guò)程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
使用Python內(nèi)置模塊與函數(shù)進(jìn)行不同進(jìn)制的數(shù)的轉(zhuǎn)換
這篇文章主要介紹了使用Python內(nèi)置模塊與函數(shù)進(jìn)行不同進(jìn)制的數(shù)的轉(zhuǎn)換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
解決python繪圖使用subplots出現(xiàn)標(biāo)題重疊的問題
這篇文章主要介紹了python繪圖使用subplots出現(xiàn)標(biāo)題重疊的問題及解決方法,本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
python實(shí)現(xiàn)批量移動(dòng)文件
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)批量移動(dòng)文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04

