Algorithm.c,RUN
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//排序,查找等算法
//顺序查找。逐一查找
int Search(int arr[], int n, int value)
{
for (int i = 0; i < n; i++)
{
if (arr[i] == value)return 1;
}
return 0;
}
//二分查找。对于有序数组,可以折半查找
int Search_Binary(const int arr[], int n, int value)
{
int start = 0, end = n - 1;
while (start <= end)
{
int middle = (start + end) / 2;
if (arr[middle] == value)
{//找到
return 1;
}
else if (arr[middle] < value)
{//可能在右半部分
start = middle + 1;
}
else
{//可能在左半部分
end = middle - 1;
}
}
return 0;
}
//冒泡排序
void Sort_Bubble(int arr[], int n)
{
for (int i = 0; i < n - 1; i++)
{//n-1轮处理
// Last i elements are already in place
int bChanged = 0;
for (int j = 0; j < n - i - 1; j++)
{
if (arr[j] > arr[j + 1])
{//相邻元素逆序,进行交换
int tmp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = tmp;
bChanged = 1;
}
}
if (!bChanged)
{//没有出现位置调整的情况,也就是说,数组已经有序
return;
}
}
}
//选择排序
void Sort_Selection(int arr[], int n)
{
for (int i = 0; i < n - 1; i++)
{//n-1轮处理
int index = i;//第一个无序元素的下标
for (int j = i + 1; j < n; j++)
{//逐一比较,挑选最小元素
if (arr[index] > arr[j])
{//记录序列中最小元素的下标
index = j;
}
}
if (index != i)
{//无序序列中第一个元素不是最小值,则第一个元素和最小值元素进行交换
int temp = arr[index];
arr[index] = arr[i];
arr[i] = temp;
}
}
}
//显示数组信息
void Show(const int arr[], int n)
{
for (int i = 0; i < n - 1; i++)
{
printf("%d, ", arr[i]);
}
printf("%d\n", arr[n-1]);
}
int main()
{
int arr[] = { 1,3,5,7,9,2,4,6,8,10 };
int len = sizeof(arr) / sizeof(int);
Sort_Selection(arr, len);
Show(arr, len);
int res = Search_Binary(arr, len, -3);
return 0;
}