二分查找:
二分查找又称折半查找是应用于有序数列中找到目标数的算法。二分查找较有序查找的优点是比较次数少,查找速度快,性能稳定‘时间复杂度为O(lgN)。
现在写出一个在数列arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}中找到目标数k = 8的过程。
int binary_search(int arr[], int k, int sz)
{
int left = 0;
int right = sz - 1;
while(left <= right)//一定要记得等号。
{
int mid = left + (right - left) / 2;
if (arr[mid] < k)
{
left = mid+1;
}
else if (arr[mid] > k)
{
right = mid-1;
}
else
{
return mid;
}
}
return -1;
}
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10 };
int k = 8;
int sz = sizeof(arr) / sizeof(arr[0]);
int ret = binary_search(arr, k, sz);
if (ret == -1)
printf("找不到\n");
else
printf("找到了:%d\n ", ret);
system("pause");
return 0;
}
``
冒泡排序:以升序为例
冒泡排序又称为气泡排序或泡沫排序。具体操作为从第一个数开始将两个相邻元素比较,若不符合大小要求就交换,一趟将一个最大数字放置最后。
*构造一个函数用来交换一个数组中的两个数用传址。
void Swap(int* x, int* y)
{
int tmp = *x;
*x = *y;
*y = tmp;
}
void bubble_sort(int arr[], int sz)
{
//冒泡排序升序
int bound = 0;
int cel = 0;
for (bound = 0; bound < sz; bound++)
{ //比较大小是两两比较,比如十个数只能比较九次.
//注意:cel < sz-bound-1!!!!!!!!!!!!
for (cel = 0 ; cel < sz-bound-1; cel++)
{
if (arr[cel] > arr[cel + 1])
{
Swap(&arr[cel], &arr[cel + 1]);
}
}
}
}
int main()
{
int i = 0;
int arr[] = {1,5,2,7};
int sz = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr, sz);
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
system("pause");
return 0;
}
如有问题,希望多多指正。