我正试图在C ++中实现一个有缺口的插入排序,称为库排序。我理解这个概念,但是我无法从常规的旧插入排序中删除它。我不知道我是如何解释数组中的差距的。我一直用整数0来指定间隙。我到目前为止的代码如下,这是一个工作插入排序修改的abit。您将如何实施库排序?我浏览了20页的谷歌,我还没有看到任何编程语言中的一个实际代码示例。
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <vector>
using namespace std;
vector<int> librarySort(int arr[20])
{
int j,tmp;
vector<int> array;
for (int i=0;i<20;i++)
{
array.push_back(0);
array.push_back(arr[i]);
}
for (int i=0;i<40;i++) { cout << array[i] << ",";}
cout << endl;
for (int i = 1; i < 40; i++)
{
j = i;
while (j > 0 && array[j - 1] > array[j])
{
tmp = array[j];
array[j] = array[j - 1];
array[j - 1] = tmp;
j--;
}
}
for (int i=0;i<40;i++) { cout << array[i] << ",";}
return array;
}
int main()
{
srand(time(0));
int array[20]= {0};
for (int i=0;i<20;i++)
{
int n=rand()%19+1;
tmp=array[i];
array[i]=array[n];
array[n]=tmp;
}
for (int i=0;i<20;i++) { cout << array[i] << ",";}
cout << endl;
librarySort(array);
}
答案 0 :(得分:1)
Here您有完整的说明和实施。差距定义为您不会使用的任何值。如果您使用指针,NULL是一个不错的选择。
在一般情况下,您必须为具有原始数据的数组创建辅助数组。在这种情况下:
df1.merge(df2, on='CustID', how='left')
这里有库排序伪代码:
#define MAX 20
#define MAX2 100//The size of the gapped array must be bigger
#define EMPTY -1//Use this constant instead of zeros.
bool isEmpty(int index, int gappedArray[MAX2]) {
return gappedArray[index]>=0;
}
vector<int> libSort(int arr[MAX]) {
int aux[MAX];
for(int i=0;i<MAX;i++) aux = i;
//Add your library sort algorithm here
//However instead of comparing arr[i] with arr[j], compare arr[aux[i]] with arr[aux[j]]
//Then, when you are going to insert sorted values, insert aux[pos], not arr[pos]
}