關(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-02
Python實現(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-07
jupyter notebook運行代碼沒反應(yīng)且in[ ]沒有*
本文主要介紹了jupyter notebook運行代碼沒反應(yīng)且in[ ]沒有*,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03
Python中排序函數(shù)sorted()函數(shù)的使用實例
sorted()作為Python內(nèi)置函數(shù)之一,其功能是對序列(列表、元組、字典、集合、還包括字符串)進(jìn)行排序,下面這篇文章主要給大家介紹了關(guān)于Python中排序函數(shù)sorted()函數(shù)的相關(guān)資料,需要的朋友可以參考下2022-11-11
Python 機(jī)器學(xué)習(xí)工具包SKlearn的安裝與使用
Sklearn(全稱 SciKit-Learn),是基于 Python 語言的機(jī)器學(xué)習(xí)工具包。本文將簡單的介紹SKlearn安裝與使用,想要入坑機(jī)器學(xué)習(xí)的同學(xué)可以參考下2021-05-05

