-
插入排序
def inster_sort(lists): count = len(lists) for i in range (1,count): key = lists[i] j = i -1 while j>=0: if lists[j] > key: lists[j+1] = lists[j] lists[j] = key j -= 1 return lists # 時間復雜度O(n**2),空間復雜度O(1) 粤蝎,穩(wěn)定
-
希爾排序
def shell_sort(lists): # 希爾排序 count = len(lists) step = 2 group = count / step while group > 0: for i in range(0, group): j = i + group while j < count: k = j - group key = lists[j] while k >= 0: if lists[k] > key: lists[k + group] = lists[k] lists[k] = key k -= group j += group group /= step return lists
-
冒泡排序
def bubble_sort(lists): # 冒泡排序 count = len(lists) for i in range(0, count): for j in range(i + 1, count): if lists[i] > lists[j]: lists[i], lists[j] = lists[j], lists[i] return lists # 時間復雜度O(n*2)竹挡,空間復雜度O(nlog2N)洪灯,穩(wěn)定
-
快速排序
def quick_sort(lists, left, right): # python 快速排序 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[right] = key quick_sort(lists, low, left - 1) quick_sort(lists, left + 1, high) return lists # 時間復雜度O(n*log2N)喜颁,空間復雜度O(nlog2N),不穩(wěn)定
# include <stdio.h> # include <stdlib.h> # define BFU_SIZE 10 # c 快速實現(xiàn) # 打印數(shù)組元素 void display(int array[],int maxlen){ int i ; for(i=0;i<maxlen;i++){ printf("%-3d",array[i]); } printf("\n"); return ; } # 執(zhí)行交換兩個數(shù)的值 void swap(int *a,int *b){ int temp; temp=*a; *a=*b; *b=temp; return; } # 快排算法 void quicksort(int attay[],int maxlen,int begin,int end){ int i,j; if(begin<end){ i=begin+1; j=end; while(i<j){ if(array[i]>array[begin]){ swap(&array[i],&array[j]); j--; } else{ i++; } } # 此時數(shù)組分成了兩個部分判没,進行比較凛虽,確定 基準數(shù) if(array[i]>=array[begin]){ i--; } swap(&array[begin],&array[i]); quicksort(array,maxlen,begin,i); quicksort(array,amxlen,j,end); } } int main(){ int n; int array[BUF_SIZE]={} int maxlen=BUF_SIZE printf("排序之前"); display(array,maxlen) quicksort(array,amxlen,0,maxxlen-1); printf("排序之后"); display(araay,maxxlen); retunr 0; }
-
直接選擇排序
def select_sort(lists): # python 選擇排序 count = len(lists) for i in range(0, count): min = i for j in range(i + 1, count): if lists[min] > lists[j]: min = j lists[min], lists[i] = lists[i], lists[min] return lists # 時間復雜度O(n**2),空間復雜度O(1),不穩(wěn)定
# c 選擇排序 void selection_sort(int arr[],int n){ int i,j,k; for(i=0;i<n;i++){ k=-1; int m =arr[i]; for(j=i;j<n;j++){ if(arr[j]<m){ m=arr[j]; k=j; } } if(k!=1){ arr[k]=arr[i]; arr[i]=m; } } }
-
堆排序
from collections import deque L=deque([34,23,32,45,67,87]) l.appendleft(0) def element_exchange(numbers,low,high): temp=numbers[low] i=low j=2*i while j<=high: # 如果右節(jié)點較大欣孤,則j指向右節(jié)點 if j<high and numbers[j]<numbers[j+1]: j=j+1 if temp>numbers[j]: # 將numbers[j]放到雙親節(jié)點上 numbers[i]=numbers[j] i=j j=i*2 else: break; # 被調(diào)整節(jié)點放入最終位置 numbers[i]=temp def top_heap_sort(numbers): length=len(numbers)-1 # 指定第一個元素的下標馋没,是無序序列的第一個非葉子節(jié)點 first_exchange_element=length/2 # 建立初始堆 print first_exchange_element for x in tange(first_exchange_element): element_exchange(numbers,first_exchange_element-x,length) # 將根節(jié)點放到最終位置,繼續(xù)堆排序 for y in range(length-1): temp=numbers[1] numbers[1]=numbers[length-y] numbers[length-y]=temp element_exchange(numbers,1,length-y-1) # 時間復雜度O(n*log2N),空間復雜度O(1),不穩(wěn)定
-
歸并排序
# 進行拆分 def merge_sort(lists): # 長度不足1降传,直接返回 if len(lists) <= 1: return lists # 二分 num = len(lists) / 2 # 遞歸拆分 left = merge_sort(lists[:num]) right = merge_sort(lists[num:]) # 執(zhí)行比較 return merge(left, right) # 進行比較合并 def merge(a,b): c = [] h=j=0 while j<len(a) and h<len(b): # 小的進入 if a[j] < b[h]: c.append(a[j]) j+=1 else: c.append(b[h]) h+=1 # a遍歷完篷朵,插入b if j==len(a): for i in b[h:]: c.append(b[i]) # b遍歷完,插入a if h==len(b): for i in a[j:]: c.append(i) return c # 時間復雜度O(n*log2N)婆排,空間復雜度O(1)声旺,穩(wěn)定
-
基數(shù)排序
import math def radix_sort(lists, radix=10): k = int(math.ceil(math.log(max(lists), radix))) bucket = [[] for i in range(radix)] for i in range(1, k+1): for j in lists: bucket[j/(radix**(i-1)) % (radix**i)].append(j) del lists[:] for z in bucket: lists += z del z[:] return lists
-
斐波那契數(shù)列
# 遞歸實現(xiàn) def item( num ): if num == 0 : res = 0 elif num == 1: res = 1 else: res = item ( num - 1) + item (num -2) return res def printFibo( no ): i = 0 while i < no: print item(i) i += 1
# 迭代器實現(xiàn),返回一個列表 def fibo(num): numList = [0,1] for i in range(num - 2): numList.append(numList[-2] + numList[-1]) return numList
-
深度遍歷
def DFS(nodes): # queue是堆棧 # order是存放的具體路徑 queue,order=[],[] queue.append(nodes) while queue: v=queue.pop() order.append(v) for w in sequense[v]: if w not in order and w not in queue: queue.append(w) return order
-
廣度遍歷
def BFS(node): queue,order=[],[] queueu.append(node) order.append(node) while queue: v=queue.pop() for w in sequense[v]: if w not in order: order.append(w) queue.append(w) return order
-
二分查找
def binary_search(find,list1): low=0 high=len(list1) while low<high: mid=(low+high)/2 if list1[mid]==find: return mid elif list1[mid]>find: high=mid-1 else: low=mid+1 return -1
?
排序算法
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門古话,熙熙樓的掌柜王于貴愁眉苦臉地迎上來雏吭,“玉大人,你說我怎么就攤上這事陪踩≌让牵” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵肩狂,是天一觀的道長摘完。 經(jīng)常有香客問我,道長傻谁,這世上最難降的妖魔是什么孝治? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮审磁,結果婚禮上谈飒,老公的妹妹穿的比我還像新娘。我一直安慰自己态蒂,他們只是感情好杭措,可當我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著钾恢,像睡著了一般瓤介。 火紅的嫁衣襯著肌膚如雪吕喘。 梳的紋絲不亂的頭發(fā)上,一...
- 文/蒼蘭香墨 我猛地睜開眼辕漂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了吴超?” 一聲冷哼從身側響起钉嘹,我...
- 正文 年R本政府宣布猩系,位于F島的核電站媚送,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蝙眶。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一褪那、第九天 我趴在偏房一處隱蔽的房頂上張望幽纷。 院中可真熱鬧,春花似錦博敬、人聲如沸友浸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽收恢。三九已至武学,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間伦意,已是汗流浹背火窒。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 一卵渴、算法的分類 1慧域、概念 將雜亂無章的數(shù)據(jù)元素,通過一定的方法按關鍵字順序排列的過程叫做排序浪读。 2昔榴、分類 非線性時...
- 1、插入排序 描述 插入排序的基本操作就是將一個數(shù)據(jù)插入到已經(jīng)排好序的有序數(shù)據(jù)中瑟啃,從而得到一個新的论泛、個數(shù)加一的有序...