Вы должны заменить while(i>0&&vec[i]>key){
на while(i>=0&&vec[i]>key){
.В этом случае i
может стать отрицательным.Таким образом, его нужно опалить, т. Е. этот код работает.
Если вы хотите остаться со своими типами, вы можете заменить все вхождения i
на i-1
и получить
#include<iostream>
#include<vector>
using namespace std;
void vec_in(vector<unsigned>& vec, unsigned size);
void vec_out(vector<unsigned> vec);
int main(){
vector<unsigned> vec;
unsigned size;
cout<<"SIZE : ";
cin>>size;
cout<<"ARRAY : ";
vec_in(vec,size);
cout<<endl;
for(unsigned j=1; j<size; j++){
unsigned key = vec[j];
unsigned i=j;
cout<<key<<endl;
while(i>0&&vec[i-1]>key){
vec[i]=vec[i-1];
i--;
}
vec[i]=key;
}
cout<<"SORTED ARRAY : ";
vec_out(vec);
}
void vec_in(vector<unsigned>& vec, unsigned size){
for(unsigned i=0; i<size; i++){
unsigned in;
cin>>in;
vec.push_back(in);
}
cout<<endl;
}
void vec_out(vector<unsigned> vec){
for(unsigned i=0; i<vec.size(); i++){
cout<<vec[i]<<" ";
}
cout<<endl;
}
, который также работает .
Обратите внимание, что ваш подход требует N ^ 2 шагов (где N это размер вектора).Есть гораздо лучшие подходы, которые делают это всего за log (N) N шагов, как быстрая сортировка.Стандартная библиотека реализует такой алгоритм.Таким образом, вы должны всегда использовать std::sort
для сортировки.