【DS】--排序大餐

void BubbleSort(int arr[], int num)
{//冒泡排序
	assert(arr != NULL && num > 1);
	if (num == 1)
		return;
	for (int i = 0;i < num - 1;++i)
		for (int j = 0;j < num - 1 - i;++j)
		{
			if (arr[j] > arr[j + 1])
			{
				swap(arr[j], arr[j + 1]);
			}
		}
}
void SelectSort(int arr[], int num)
{//选择排序
	assert(arr != NULL && num > 1);
	if (num == 1)
		return;
	for (int i = 0;i < num-1;++i)
	{
		int temp = i;
		for (int j = i+1;j < num;++j)
		{
			if (arr[j] < arr[temp])
			{
				temp = j;
			}
			if (i!= temp)
			{
				swap(arr[i], arr[temp]);
			}
		}
	}
		
}
//二分查找的递归算法
int BinarySearch_R(int *arr, int left,int right, int key)
{
	assert(arr != NULL);
	
	if (left<right)
	{
		int mid = left + ((right - left) / 2);
		if (key == arr[mid])
		{
			return mid;
		}
		else if (key > arr[mid])
		{
			return BinarySearch_R(arr, mid + 1, right, key);
		}
		else
		{
			return BinarySearch_R(arr, left, mid, key);
		}
	}
	if (left==right)
	{
		return -1;
	}
}
//二分查找的循环算法
int BinarySearch(int *arr, int Len, int key)
{
	assert(arr!=NULL);
	int left = 0;
	int right = Len;

	while (left < right)
	{
		int mid = left + ((right-left)/2);
		if (key == arr[mid])
		{
			return mid;
		}
		else if(key>arr[mid])
		{
			left = mid + 1;
		}
		else
		{
			right = mid;
		}
	}
	if (left == right)
	{
		return -1;
	}
}

//全排列 "abc"
void Permutation(char *p, const int start, int end)
{
	if (start==end)
	{
		for (int i = 0;i <= end;++i)
		{
			cout << p[i];
		}
		cout << endl;
	}
	for (int i = start;i <= end;++i)
	{
		swap(p[start], p[i]);
		Permutation(p, start + 1, end);
		swap(p[start], p[i]);
	}
	
}

你可能感兴趣的:(【DS】--排序大餐)