選擇排序&二分搜索

博主不定期更新【保研/推免、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;	
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章