快速排序用递归的方式实现,二分查找用循环的方法实现。也可以用qsort实现快速排序。
#include<iostream> using namespace std; //快速排序 void Qsort(int a[], int left, int right) { if (left >= right)return; int i = left, j = right; int base = a[left], temp;//基准值 while (i < j) { while (j > i && a[j] >= base)j--; while (i < j && a[i] <= base) i++; if (i < j) { temp = a[i]; a[i] = a[j]; a[j] = temp; } } temp = a[i]; a[i] = a[left]; a[left] = temp; Qsort(a, left, i - 1); Qsort(a, i + 1, right); } //二分,循环查找: int binarySearch(int a[], int n ,int target) { int left = 0, right= n-1; while (left < right) { int middle = (left + right) / 2; if (target == a[middle])return a[middle]; if (target < a[middle])right = middle - 1; if (target > a[middle])left = middle +1; } return -1; } //从小到大排序 int cmp(const void * a, const void* b) { return *(int*)a - * (int*)b; } int main() { int a[10] = { 11, 11, 12 ,13, 14,5,6,7,8,9 }; cout << "原来的数组:"; for (int i = 0; i < 10; i++)cout << a[i] << " "; cout << endl; Qsort(a,0, 9); int b = binarySearch(a, 10, 12); cout << "查找结果:"<<b << endl; for(int i=0;i<10;i++)cout << a[i]<<" "; //当然,用自带的快速排序更香,比较简单 cout << endl; int arr[10] = { 11, 11, 12 ,13, 14,5,6,7,8,9 }; qsort(arr, 10, sizeof(int), cmp); for (int i = 0; i < 10; i++)cout << arr[i] << " "; return 0; }一个小小的应用: 要求两个集合的并集时,可以先对一个集合进行排序,再用二分查找会比较快。当然,改进的话可以对两个集合都进行排序,当找到某一位置时,直接将后面一大段移到另一个数组后面就可以了。
