自己写一个快速排序,原理网上也很多。STL 的sort比较好用,会自动判断使用heap sort或者Intro quick sort(类似三数取中法快排)。
int quickSortPart(int a[],int left,int right)
{
int temp = a[right];
while (left<right)
{
while (left<right&&a[left]<temp )
{
left++;
}
a[right] = a[left];
while (left < right&&a[right] >=temp)
{
right--;
}
a[left] = a[right];
}
a[right] = temp;
return right;
}
void quickSort(int a[], int left, int right)
{
if (left<right)
{
int mid = quickSortPart(a, left, right);
quickSort(a, left, mid - 1);
quickSort(a, mid + 1, right);
}
}
STL为了避免元素输入时不够随机,采用多种方式改变int quickSortPart(int a[],int left,int right)中temp的选取,
Median -of -Three
思路和代码都简单,在我们的quickSortPart前添加逻辑判断,找到first,mid,last中第二大的数和最后一个数交换,然后在执行我们的quicSortPart。
equal_range思想
STL中的有序查找,实现原理依然是二分查找。思路和代码如下
int BinFind(int a[], int size,int key)//升序2分查找
{
int left = 0;
int right =size - 1;
while (left <= right)
{
int mid = (left + right) >> 1;
if (a[mid] < key)
left = mid + 1;
if (a[mid] > key)
right = mid - 1;
if (a[mid] == key)
return mid;
}
return -1;
}