选择排序二分搜索
博主不定期更新【保研/推免、C/C++、5G移動通信、Linux、生活隨筆】系列文章,喜歡的朋友【點贊+關注】支持一下吧!
選擇排序C語言實現
#include <stdio.h>int main() {int a[] = {1,5,4,2,6,3,8,15,20,18,19,7,16,13,17,14,12,10,11,9} ;int len = sizeof(a) / sizeof(a[0]);int k;for (k=len-1; k>0; k--){//尋找最大的數,也可以把下面這段寫成一個子函數,在這里調用int maxid = 0;int i;for ( i=0; i<k+1; i++){if (a[i] > a[maxid]){maxid = i;}}//將最大的數與最后一位數交換int t = a[maxid];a[maxid] = a[k];a[k] = t;} //輸出排序完成后的結果int j;for ( j=0; j<len; j++){printf("%d ", a[j]); }return 0; }二分搜索C語言實現
前提條件:搜索數據已經排好序
#include <stdio.h>int search (int key, int a[], int len); int main() {int key = 15;int a[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};int r = search(key, a, sizeof(a)/sizeof(a[0]));printf("%d", r);return 0; } //二分查找函數 int search (int key, int a[], int len) {int ret = -1;//找到則輸出在數組中的下標,找不到輸出-1int left = 0;int right = len-1;while (right >= left) //注意循環條件,如果寫成right>left,搜索邊界值時會出錯{int mid = (left + right)/2;if ( a[mid] == key){ret = mid;break;}else if( a[mid] > key){right = mid - 1;}else{left = mid + 1;}}return ret; }總結
- 上一篇: 直线扫描转换-DDA算法
- 下一篇: dp 1.4协议_浅析关于HDMI接口与