Не удалось обнаружить ошибку в приведенной ниже сортировке двоичного кода вставки с использованием C ++ - PullRequest
0 голосов
/ 04 ноября 2019

Я пытаюсь запустить этот двоичный код сортировки вставки, используя возвышенный текст. Он только печатает выходные данные несортированного массива, но не отсортированный массив. Он также не показывает никакой ошибки.

// C++ program for Binary Insertion sort  
#include <iostream>
using namespace std;

// a function to print the array
void print_array(int arr[], int n)
{   
    int i;
    for(i=0; i<n; i++)
    {
        cout<<arr[i]<<" ";
    }
    cout<<endl;
}


int binary_search(int arr[], int key, int low, int high)
{
    if(high<=low)
    {
        if(key<arr[high])
            return low;
        if(key>arr[high])
            return low+1;
    }
    int mid = (low+high)/2;
    if(key==arr[mid])
        return mid+1;
    if(key>arr[mid])
        return binary_search(arr, key, mid, high);
    return binary_search(arr, key, 0, mid);

}


void insertion_sort(int arr[],int n)
{
    int i, j, key, loc;
    for(i=0; i<n; i++)
    {
        key=arr[i];
        j = i-1;
        // finding location for the selected item to place using binary search
        loc = binary_search(arr, key, 0, j);
        while(j>=loc)
        {
            arr[j+1]=arr[j];
            j=j-1;
        }
        arr[j+1]=key;
    }
}

int main()
{
    int arr[] = {1, 6, 2, 4, 9, 12};
    int n=sizeof(arr)/sizeof(arr[0]);
    int n2=sizeof(arr[0]);
    cout<<"size of n:"<<n<<endl;
    cout<<"unsorted array is:";
    print_array(arr,n);
    insertion_sort(arr,n);
    cout<<"sorted array is : ";
    print_array(arr,n);
    return 0;

}

вывод, который я получаю, выглядит следующим образом:

size of n:6
unsorted array is:1 6 2 4 9 12 
[Finished in 5.3s]
...