**:
#coding:utf-8
#author:徐卜靈
#交換排序.快速排序
#雖然快速排序稱為分治法,但分治法這三個字顯然無法很好的概括快速排序的全部步驟。因此我的對快速排序作了進一步的說明:挖坑填數+分治法:
#import sys
#sys.setrecursionlimit(150000)
l = [6, 3, 2, 32, 5, 4]
deffast_sort(l, left,right):
if left >=right:
return
l key =l[left]
low =left
high =right
while left #if l[right] > key:
#right-=1
#else:
#l[left] = l[right]
#if l[left] <= key:
#left += 1
#else:
#l[right] = l[left]
#l[left] = key
while left < right and l[right] >=key:
right -= 1l[left] =l[right]
while left < right and l[left] <=key:
left += 1l[right] =l[left]
l[left] =key
fast_sort(l, low, left - 1)
fast_sort(l,left + 1,high)
return
lprint fast_sort(l,0,5)
#1.高質量**
#def quick_sort(lists, left, right):
## 快速排序
#if left >= right:
#return lists
#key = lists[left]
#low = left
#high = right
#while left < right:
#while left < right and lists[right] >= key:
#right -= 1
#lists[left] = lists[right]
#while left < right and lists[left] <= key:
#left += 1
#lists[right] = lists[left]
#lists[left] = key
#quick_sort(lists, low, left - 1)
#quick_sort(lists, left + 1, high)
#return lists
#print quick_sort(l,0,5)
#2.高質量**
## 設定最低位和最高位
#def quicksort(nums, low, high):
## 設定乙個比較基準key
#key = nums[low]
#while low#
# 如果最高位的數 大於等於 key則向前走
#while low= key:
#high -= 1
## 如果最低位的數 小於等於 key則向後走
#while low#
low += 1
## 交換值
#nums[low], nums[high] = nums[high], nums[low]##
#最後low=high, 此時交換key和high位上的值, 使小於key的值在key左邊, 大的在key右邊
#nums[nums.index(key)], nums[low] = nums[low], nums[nums.index(key)]
## 返回最低位的位置
#return low##
## 進行重複操作
#def interval(nums, low, high):
#if low#
# 進行排序並得到最低位位置以迴圈操作
#key_index = quicksort(nums, low, high)
#interval(nums, low, key_index)
#interval(nums, key_index+1, high)##
#nums = [64,3,9,2,4,7,0,12,45,]
#interval(nums, 0, len(nums)-1)
#print nums
#
演算法理解上沒有什麼問題,問題在演算法實現上。特別注意的是幾個索引,low 和 high 做一下快取。
另外,在用遞迴的時候,一定注意迭代停止的判斷條件。我在寫**的時候就一直忘了加判斷條件,結果總是提示錯誤。乙個簡單的錯誤就搞這麼久。
時間複雜度:o(nlogn)
空間複雜讀:o(nlogn)
非穩定排序演算法。
大多數情況下的最優選的排序演算法,時間複雜度低嘛。
八大排序演算法python實現
1.氣泡排序 氣泡排序重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越大的元素會經由交換慢慢 浮 到數列的頂端,故名。步驟 比較相鄰的元素。如果第乙個比第二個大,就交...
八大排序演算法
1.直接插入排序 原理 將陣列分為無序區和有序區兩個區,然後不斷將無序區的第乙個元素按大小順序插入到有序區中去,最終將所有無序區元素都移動到有序區完成排序。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。實現 void insertsort node l,int length void shell ...
八大排序演算法
一 概述 八大排序演算法包括 1 插入排序之直接插入排序 straight insertion sort 2 插入排序之希爾排序 shells sort 3 選擇排序之簡單選擇排序 selection sort 4 選擇排序之堆排序 heap sort 5 交換排序之氣泡排序 bubble sort...