二分插入与二分查找

 

/*

 * binarysort.cpp

 *

 *  Created on: 2013-10-8

 *      Author: wangzhu

 */



#include<cstdio>

#include<iostream>

using namespace std;

#define NMAX 1000

int arr[NMAX];

int binarySearch(int left, int right, int key) {

    while (left <= right) {

        int mid = left + (right - left) / 2;

        if (arr[mid] >= key) {

            right = mid - 1;

        } else {

            left = mid + 1;

        }

    }

    return left;

}

int main() {

    freopen("data.in", "r", stdin);

    int n;

    while (~scanf("%d", &n)) {

        for (int i = 0; i < n; i++) {

            scanf("%d", arr + i);

        }

        for (int i = 0; i < n; i++) {

            int temp = arr[i];

            int end = binarySearch(0, i, temp);

            for (int j = i - 1; j >= end; j--) {

                arr[j + 1] = arr[j];

            }

            arr[end] = temp;

        }

        for (int i = 0; i < n; i++) {

            if (i == n - 1) {

                printf("%d\n", arr[i]);

            } else {

                printf("%d ", arr[i]);

            }

        }

    }

    return 0;

}

 

你可能感兴趣的:(二分查找)