通過交換使相鄰的兩個數變成小數在前大數在後,這樣每次遍歷後,最大的數就「沉」到最後面了。重複n次即可以使陣列有序。
陣列分成有序區和無序區,初始時整個陣列都是無序區,然後每次從無序區選乙個最小的元素直接放到有序區的最後,直到整個陣列變有序區。def butttle(arr):
for i in range(len(arr)-1):
exchange = false
for j in range(len(arr)-i-1):
if arr[j]>arr[j+1]:
arr[j],arr[j+1] = arr[j+1],arr[j]
exchange = true
if not exchange:
return
每次將乙個待排序的資料,跟前面已經有序的序列的數字一一比較找到自己合適的位置,插入到序列中,直到全部資料插入完成。def select_sort(arr):
for i in range(len(arr)-1):
min_num = i
for j in range(i+1,len(arr)):
if arr[min_num]>arr[j]:
min_num = j
if min_num != i:
arr[min_num],arr[i] = arr[i],arr[min_num]
def insert_sort(arr):
for i in range(1,len(arr)):
x = arr[i]
for j in range(i,-1,-1):
if x < arr[j-1]:
arr[j] = arr[j-1]
else:
break
arr[j] = x
比前乙個更快def quik_sort(arr):
if len(arr)<=1:
return arr
middle = arr[len(arr) // 2]
left = [i for i in arr if i < middle]
right = [i for i in arr if i > middle]
middle = [i for i in arr if i == middle]
return quik_sort(left) + middle + quik_sort(right)
def qiuksort(array,left,right):
# 這裡注意right是列表的長度減一
if left >= right:
return
low = left
high = right
key = array[low]
while left < right:
while left < right and array[right] > key:
right -= 1
array[left] = array[right]
while left < right and array[left] <= key:
left += 1
array[right] = array[left]
array[right] = key
qiuksort(array, low, left - 1)
qiuksort(array, left + 1, high)
冒泡 選擇 插入 快排 歸併的實現
冒泡 var arr 29 45,51 68,72 97 外層迴圈,控制趟數,每一次找到乙個最大值 for var i 0 i arr.length 1 i console.log arr 2,4,5,12,31,32,45,52,78,89 插入 function loop arr arr j 1...
Python實現排序(冒泡 選擇 快速 插入)
排序是比較常見的演算法了,針對實際資料的特點擊擇合適的排序演算法可以使程式獲得更高的效率,今天來總結一下用python來實現各種排序。氣泡排序是一種很簡單的排序了,名字也很形象 思想 相鄰節點進行兩兩比較,如果左邊的比右邊的大就交換兩個元素的位置,第一輪排序結束後,最大的元素跑到了最右面 接下來對沒...
Java 常用演算法(冒泡 選擇 插入 快排)
氣泡排序是所有排序演算法中最基本 最簡單的一種。思想就是交換排序,通過比較和交換相鄰的資料來達到排序的目的。設陣列的長度為n 1 比較前後相鄰的二個資料,如果前面資料大於後面的資料,就將這二個資料交換。2 這樣對陣列的第0個資料到n 1個資料進行一次遍歷後,最大的乙個資料就 沉 到陣列第n 1個位置...