博主不定期更新【保研/推免、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;
}