C/C++

Проблемы с пузырьковой сортировкой.

#include <iostream>
using namespace std;
int main ()
{
int n;
const int N = 1001;
cin >> n;
int a[N] {0};
for (int i = 0; i <= n - 1; i++)
{
cin >> a[i] ;
}
for (int j = 0; j <= n - 1; j++)
{
for (int k = 0; k <= n - 1; k++)
{
if (a[k] > a[k + 1])
{
swap(a[k], a[k + 1]);
}
}
}
for (int i = 1; i <= n; i++)
{
cout << a[i] << " " ;
}
}
Код не работает, видите ли вы ошибки?
 #include  
using namespace std;
void bubble_sort(int* box, int n) {
auto first = box;
auto last = box + n;
while (first < --last) {
for (auto begin = first; begin < last; ++begin) {
if (*(begin + 1) < *begin) {
swap(*begin, *(begin + 1));
}
}
}
}
int main() {
const size_t m = 100;
int box[m]{};
cout > n;
if (n > m) n = m;
cout > box[i];
bubble_sort(box, n);
cout
Евгений Раднаев
Евгений Раднаев
76 757
Лучший ответ
вроде работает, но есть и вопросы:
1. Зачем N, когда ты оперируешь n элементами? Пожалей память и вместо a[N], создавай a[n]
2. если обращаешься к (k + 1)-ому эелементу, следи, чтобы он не выходил за рамки массива. Например, в твоем вложенном цикле, при k = n - 1, ты будешь пытаться обратиться к элементу с индексом n, когда при n элементах, последний имеет индекс - (n - 1)
3. при пузырьке, второй(вложенный) цикл необязательно доводить до конца: после i-ой отработки вложенного цикла, часть, состоящая из i элементов будет уже отсортирована, поэтому ее можно лишний раз и не трогать, на самом деле, то есть, вместо:
 for(int i = 0; i < n; i++){
for(int j = 0; j < n - 1; j++){
//swap(a[j], a[j + 1], if needed
}}
можно ограничиться:
 for(int i = 0; i < n - 1; i++){ 
for(int j = 0; j < n - i - 1; j++){
//swap(a[j], a[j + 1], if needed
}}
Сергей Махнёв
Сергей Махнёв
12 614
Владислав Стрижков "вместо a[N], создавай a[n]"
Это нестандартное расширение C++ - VLA массивы из чистого С. Некоторые компиляторы C++ поддерживают, некоторые нет. Поэтому чтобы на всех компиляторах шло, тогда нужен динамический массив.