Algorithm.cRUN

#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;
}