博主不定期更新【保研/推免、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;//找到則輸出在數組中的下標,找不到輸出-1
int 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;
}