“插入排序直到位置”算法很奇怪,并不能很好地工作(C ++实现)

时间:2014-07-25 20:36:47

标签: c++ algorithm sorting vector

我正在阅读教授的讲座并实施他的代码,以便更好地理解每种排序算法。

我们进行了插入排序并注意到有3种不同的类型:

  • 常规插入排序
  • 插入排序直至位于
  • 插入按标志排序

我实现的问题是插入排序直到找到如下: 与基本插入排序相同,除了j-loop(内部循环)一旦被定位的元素相对于前一个元素排序就终止。终止有效,因为所有前面的元素已经排序。算法如下:

for i = 2 to n
   j = i
   while (a[j] < a[j-1]) and (j>1)
       swap (a[j],a[j-1]), set j=j-1
   endwhile
 endfor 

他的伪代码算法很奇怪,因为假设数组从1开始,所以当我用C ++实现它时,显然不会对第一个元素进行排序。当我想要它开始假设0是我超出我的范围的第一个元素。我有义务在外循环中进行检查,这样可以成功排序。

以下是我之前使用的C ++实现:

void insertionSortTilLocated(vector<int>vector)
{
    for (int i = 2; i < vector.size(); i++)
    {
        int j = i;
        while (vector[j] < vector[j - 1] && j > 1)
        {
            swap(vector[j], vector[j - 1]);
            j = j - 1;
        }
     }
     cout << "Insertion sort til located" << endl;
     for (int k = 0; k < vector.size(); k++)
     {
         cout << vector[k] << endl;
     }
}

我实施的添加的检查交换是成功的:

void insertionSortTilLocated(vector<int>vector)
{
    for (int i = 2; i < vector.size(); i++)
    {
        ...
        //Swap Check added
        if (vector[0] > vector[1])
        {
             swap(vector[0],vector[1]);
        }
     }
     ...
}

即使我设法解决了我的问题,但我想知道,我在哪里可以找到更好的算法?我无法找到它进行搜索并找到“Insertion Sort Till located”的结果,而我正在使用的教科书并未使用此算法解决这个问题。有人可以提供算法的增强版本,这样更有意义吗?或者至少对它有一个增强的解释,这样更有意义吗?

由于

0 个答案:

没有答案