码迷,mamicode.com
首页 > 编程语言 > 详细

快速排序与二分查找

时间:2015-07-25 21:24:53      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

#include <iostream>
#include <string>
using namespace std;

void quicksort(int arry[], int low, int high)
{
    int oldlow = low;
    int oldhigh = high;

    if(low >= high)
    {
        return;
    }
    int key = arry[low];
    while(low < high)
    {
        while(low < high && arry[high] > key){ --high; };
        arry[low] = arry[high];

        while(low < high && arry[low] < key) { ++low; };
        arry[high] = arry[low];
    }
    arry[low] = key;
    quicksort(arry, oldlow, low - 1);
    quicksort(arry, high + 1, oldhigh);

}

bool binarysearch(int arry[], int n, int low, int high, int &key, int &index)
{
    if(low > n - 1 || high < 0 || low > high)
    {
        cout<<"can‘t find "<<key<<endl;
        return false;
    }
    int middle = (low + high) % 2 == 0 ? (low + high) / 2 : (low + high) / 2 + 1;
    if(arry[middle] == key)
    {
        index = middle;
        return true;
    }
    else
    {
        if(arry[middle] > key) high = middle - 1;
        if(arry[middle] < key) low = middle + 1;
    }

    return binarysearch(arry, n, low, high, key, index);
}

int main()
{
    int arry[] = {1,2,6,7,854,23,4,22,44,55};
    int size = sizeof(arry)/sizeof(arry[0]);
    quicksort(arry, 0, size -1);
    cout<<"arry size is "<<size<<", after sort is:"<<endl;
    for(int i = 0; i < size; ++i)
    {
        cout<<arry[i]<<",";
    }
    cout<<endl;
    cout<<"binarysearch test."<<endl;
    int index;
    int value = 854;
    if(binarysearch(arry, size, 0, size - 1, value, index))
    {
        cout<<"find "<<value<<" ok, index is "<<index<<endl;
    }
    value = 54;
    if(binarysearch(arry, size, 0, size - 1, value, index))
    {
        cout<<"find "<<value<<" ok, index is "<<index<<endl;
    }

    return 0;
}

  

  

2 2 4 9 3 6 7 1 5 首先用2当作基准,使用i j两个指针分别从两边进行扫描,把比2小的元素和比2大的元素分开。首先比较2和5,5比2大,j左移

2 2 4 9 3 6 7 1 5 比较2和1,1小于2,所以把1放在2的位置

2 1 4 9 3 6 7 1 5 比较2和4,4大于2,因此将4移动到后面

2 1 4 9 3 6 7 4 5 比较2和7,2和6,2和3,2和9,全部大于2,满足条件,因此不变

经过第一轮的快速排序,元素变为下面的样子

[1] 2 [4 9 3 6 7 5]

 

快速排序与二分查找

标签:

原文地址:http://www.cnblogs.com/foreverstars/p/4676471.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!