要素を並べ替えられたベクトルにすばやく挿入することを目的として、C++ プログラムを作成しました。時々機能しますが、常に機能するわけではなく、その理由を理解できませんでした. 紙と鉛筆でアルゴリズムをたどるとうまくいきますが、何かが間違っています。助けてください?
#include <time.h>
#include <cstdlib>
#include <vector>
#include <iostream>
using namespace std;
vector<int> sortedVec;
int main() {
// Random seed
srand(time(NULL));
// Put in n random elements
for (int i = 0; i < 10; i++) sortedVec.push_back(rand()%10);
// Sort the vector
bool swapped = true;
int endDecrement = 0;
while (swapped) {
swapped = false;
endDecrement++;
for (int i = 0; i < sortedVec.size()-endDecrement; i++) {
if (sortedVec.at(i) > sortedVec.at(i+1)) {
int swap = sortedVec.at(i);
sortedVec.at(i) = sortedVec.at(i+1);
sortedVec.at(i+1) = swap;
swapped = true;
}
}
}
cout<<"Sorted random list:"<<endl;
for (int i = 0; i < sortedVec.size(); i++) cout<<sortedVec.at(i)<<endl;
int toInsert = rand()%10;
cout<<"Random element to insert = "<<toInsert<<endl;
// Insert a random int to the sorted vector
int minIndex = 0;
int maxIndex = sortedVec.size()-1;
while (true) {
int mid = (maxIndex-minIndex)>>1;
if (toInsert == sortedVec.at(mid) || maxIndex-minIndex < 2) {
sortedVec.insert(sortedVec.begin()+mid, toInsert);
break;
}
else if (toInsert < sortedVec.at(mid)) maxIndex = mid;
else if (toInsert > sortedVec.at(mid)) minIndex = mid;
}
cout<<"Random list with inserted element:"<<endl;
for (int i = 0; i < sortedVec.size(); i++) cout<<sortedVec.at(i)<<endl;
return 0;
}