C++实现快排和二分查找
#include<iostream>
using namespace std;
void quick_sort(int *arr, int left, int right) {
if (left >= right) return;
int i = left, j = right;
int standard = arr[(right+left)/2];
while (i < j)
{
while (i < j && arr[i] < standard) i++; //找到左边第一个比 standard 大的元素
while (i < j && arr[j] > standard) j--; //找到右边第一个比 standard 小的元素
cout << "交换" << arr[i] << " " << arr[j] << endl;
swap(arr[i], arr[j]); //交换这两个元素
}
for (int i = 0; i < 7; i++)
cout << arr[i] << " ";
cout << endl;
quick_sort(arr, left, i - 1); //对左半边进行递归
quick_sort(arr, i + 1, right); //对右半边进行递归
}
bool Binary_Search(int *arr, int n, int x) //只适用于有序表
{
int low = 0, high = n - 1;
int cnt = 0;
int mid = 0;
while (low <= high)
{
mid = (low + high) / 2;
cnt++;
if (arr[mid] == x)
{
cout << "找到x:" << x;
cout << "查找次数:" << cnt;
return true;
}
else if (arr[mid] > x) high = mid - 1;
else low = mid + 1;
}
return false;
}
int main()
{
int A[7] = { 5,7,4,2,3,8,1 };
for (int i = 0; i < 7; i++)
cout << A[i] << " ";
cout << endl;
quick_sort(A, 0, 6);
Binary_Search(A, 7, 1);
system("pause");
}