關(guān)于Python排序問題(冒泡/選擇/插入)
前言:
學(xué)過C語言肯定接觸過排序問題,我們最常用的也就是冒泡排序、選擇排序、插入排序……等等,同樣在Python中也有排序問題,這里我也會講解Python中冒泡排序、選擇排序和插入排序的寫法和思維,上正文!
(這里我是以列表作為一個排序?qū)ο螅?/p>
1.冒泡排序
冒泡排序(Bubble Sort,臺灣譯為:泡沫排序或氣泡排序)是一種簡單的排序算法。它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就是說該數(shù)列已經(jīng)排序完成。
這個算法的名字由來是因為越大的元素會經(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)是一種簡單直觀的排序算法。它的工作原理是每一次從待排序的數(shù)據(jù)元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的數(shù)據(jù)元素排完。 選擇排序是不穩(wěn)定的排序方法(比如序列[5, 5, 3]第一次就將第一個[5]與[3]交換,導(dǎo)致第一個5挪動到第二個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.插入排序
有一個已經(jīng)有序的數(shù)據(jù)序列,要求在這個已經(jīng)排好的數(shù)據(jù)序列中插入一個數(shù),但要求插入后此數(shù)據(jù)序列仍然有序,這個時候就要用到一種新的排序方法--插入排序法,插入排序的基本操作就是將一個數(shù)據(jù)插入到已經(jīng)排好序的有序數(shù)據(jù)中,從而得到一個新的、個數(shù)加一的有序數(shù)據(jù),算法適用于少量數(shù)據(jù)的排序,時間復(fù)雜度為O(n^2)。是穩(wěn)定的排序方法。插入算法把要排序的數(shù)組分成兩部分:第一部分包含了這個數(shù)組的所有元素,但將最后一個元素除外(讓數(shù)組多一個空間才有插入的位置),而第二部分就只包含這一個元素(即待插入元素)。在第一部分排序完成后,再將這個最后元素插入到已排好序的第一部分中。
插入排序的基本思想是:每步將一個待排序的紀(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Pygame Surface創(chuàng)建圖像的實現(xiàn)
本文主要介紹了Pygame Surface創(chuàng)建圖像的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02Python實現(xiàn)的尋找前5個默尼森數(shù)算法示例
這篇文章主要介紹了Python實現(xiàn)的尋找前5個默尼森數(shù)算法,簡單講述了默尼森數(shù)的概念,并結(jié)合實例形式分析了Python求解默尼森數(shù)算法的相關(guān)操作技巧,需要的朋友可以參考下2018-03-03用python刪除java文件頭上版權(quán)信息的方法
在使用他人代碼時,為不保留文件頭部版權(quán)信息,需要一個個刪掉,下面是用python刪除java文件頭上的版權(quán)信息的方法2014-07-07jupyter notebook運行代碼沒反應(yīng)且in[ ]沒有*
本文主要介紹了jupyter notebook運行代碼沒反應(yīng)且in[ ]沒有*,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03Python中排序函數(shù)sorted()函數(shù)的使用實例
sorted()作為Python內(nèi)置函數(shù)之一,其功能是對序列(列表、元組、字典、集合、還包括字符串)進(jìn)行排序,下面這篇文章主要給大家介紹了關(guān)于Python中排序函數(shù)sorted()函數(shù)的相關(guān)資料,需要的朋友可以參考下2022-11-11Python 機(jī)器學(xué)習(xí)工具包SKlearn的安裝與使用
Sklearn(全稱 SciKit-Learn),是基于 Python 語言的機(jī)器學(xué)習(xí)工具包。本文將簡單的介紹SKlearn安裝與使用,想要入坑機(jī)器學(xué)習(xí)的同學(xué)可以參考下2021-05-05