1.二叉樹 堆排序 o(nlogn)
滿二叉樹: 葉子節點全部在同乙個高度,且除了葉子節點外,所有的節點都有左右子節點
一棵高度為h的滿二叉樹,一共有 (2^h-1) 節點
平衡二叉樹: 從任意乙個節點開始,它的左右子樹的高度差不會超過1
完全二叉樹: 除了最後一層的葉子節點必須是從左到右
大棧堆: 任意乙個根節點的值都要大於(或等於)左右子樹的所有的值 (完全二叉樹 從上到下 從大到小排列)
小棧堆: 任意乙個根節點的值都要小於左右子樹的值 (完全二叉樹 從上到下 從小到大排列)
把完全二叉樹調整成大棧堆(小棧堆),從最後乙個根節點(len/2-1)開始往前調整 ,每次迴圈將當前節點的值和子節點的值按從大到小排列,迴圈調整根節點即可完成大棧堆陣列.將大棧堆中最大值交換到最後乙個 len-1 節點上,再len-1個元素再次調整為大棧堆,迴圈len-1次後,陣列有序.
void swap(int *str1,int *str2)
void stackonesort(int arr,size_t len,int index)
if(big+1arr[big])
if(data < arr[big])else
} arr[index] = data;
}void stackbigsort(int arr,size_t len)
}void stacksort(int arr,size_t len)
}
2.氣泡排序 o(n^2)
迴圈比較兩個元素,較大值(往後移)冒出來,最後移到最後乙個,下一次再迴圈比較,重複後移到倒數第二個;迴圈結束後,陣列有序.
void selectsort(int arr,size_t len)
} if(max != i)
}}
4.雞尾酒排序 o(n^2)
每次記錄最大值和最小值的下標
最大值放末尾 最小值放開始
迴圈len/2次,陣列有序
void cooksort(int arr,size_t len)
if(arr[j]5.直接插入 o(n^2)
1,19,9,8,7,4,16,0,3,2,7,20,15,5,6,17,11,14
假設現在是第i個元素 前面i-1個元素都有序 把arr[i]插入到前面i-1元素中使陣列保持有序
void insertsort(int arr,size_t len)
arr[j+1] = data;
}
}
6.折半插入(二分插入) o(n^2)
void binaryinsertsort(int arr,size_t len)
arr[j+1] = data;
}}
7.希爾插入排序 o(nlogn)
void shellsort(int arr,size_t len)
arr[i+step] = data;
} }}
8.歸併排序 o(nlogn)
把兩個有序的陣列合併成乙個有序的陣列
void mergerarr(int arr,size_t left,size_t right)
int mid = (left+right)/2;
if(mid-left>=1)
merger(arr,left,mid);//對[left,mid]區間進行排序
if(right-mid-1>=1)
merger(arr,mid+1,right);//對[mid+1,right]區間進行排序
mergerarr(arr,left,right);//把[left,mid],[mid+1,right]兩部分有序的合併成乙個整體有序的
}void mergersort(int arr,size_t len)
9.快速排序 o(nlogn)
記下左右兩端的數序號[left,right],記錄乙個數比如說 data = arr[left] 序號
然後去left右邊 找乙個比 arr[left] 小的數放在左邊
後又去right左邊找乙個比 arr[left] 大的數放在右邊
迴圈直到最後
遞迴呼叫自己 執行每乙個數
void quick(int arr,int left,int right) //查詢左邊的小於等於data的數
arr[i] = arr[j]; //放置在左邊i
while(i1)
if(right-i>1)
}void quicksort(int arr,size_t len)
10.計數(桶)排序 o(n)
適用於在某個比較小的區間內資料密度比較大的情況下
例:arr[10]=;
比對陣列 [min,max] 區間 尋找陣列內的數在這個區間內各個整數所佔的數量
void countsort(int arr,size_t len)que;
void init(que *que,size_t cap)
void push(que *que,t data)
que->m_vect[que->size++] = data;
}t pop(que *que)
void destroy(que *que)
bool isempty(que *que)
void reset(que *que)
void basesort(int arr,size_t len)
} que ps[10];
for(int i=0;i<10;i++)
int cnt = 0;
printf("%d \n",max);
while(max!=0)
for(int i=0;ipush(&ps[n%10],arr[j]);//按n%10放入相應的位置
} int m =0;
for(int j=0;j<10;j++)
reset(&ps[j]);//為max的下乙個位,復位
} }for(int i=0;i<10;i++)
}
vue十乙個生命週期函式
lang en charset utf 8 name viewport content width device width,initial scale 1.0 documenttitle head p1 p click title 站著 修改button div onclick test 銷毀bu...
十乙個常見的PHP安全細則
php本身再老版本有一些問題,比如在 php4.3.10和php5.0.3以前有一些比較嚴重的bug,所以推薦使用新版。另外,目前鬧的轟轟烈烈的sql injection也是在php上有很多利用方式,所以要保證安全,php 編寫是一方面,php的配置更是非常關鍵。我們php手手工安裝的,php的預設...
十乙個常見的PHP安全細則
php本身再老版本有一些問題,比如在 php4.3.10和php5.0.3以前有一些比較嚴重的bug,所以推薦使用新版。另外,目前鬧的轟轟烈烈的sql injection也是在php上有很多利用方式,所以要保證安全,php 編寫是一方面,php的配置更是非常關鍵。我們php手手工安裝的,php的預設...