#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] << " " ;
}
}
Код не работает, видите ли вы ошибки?
C/C++
Проблемы с пузырьковой сортировкой.
#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
вроде работает, но есть и вопросы:
1. Зачем N, когда ты оперируешь n элементами? Пожалей память и вместо a[N], создавай a[n]
2. если обращаешься к (k + 1)-ому эелементу, следи, чтобы он не выходил за рамки массива. Например, в твоем вложенном цикле, при k = n - 1, ты будешь пытаться обратиться к элементу с индексом n, когда при n элементах, последний имеет индекс - (n - 1)
3. при пузырьке, второй(вложенный) цикл необязательно доводить до конца: после i-ой отработки вложенного цикла, часть, состоящая из i элементов будет уже отсортирована, поэтому ее можно лишний раз и не трогать, на самом деле, то есть, вместо:
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
}}
Похожие вопросы
- Проблемы с сортировкой массива методом пузырька.
- Сравнение скорости сортировки выбором и сортировки слиянием (SelectionSort vs MergeSort)
- Выполните сортировку массивов ТРЕМЯ СПОСОБАМИ: методом пузырька, прямого поиска и быстрой сортировкой. С++
- Выполните сортировку массивов ТРЕМЯ СПОСОБАМИ: методом пузырька, прямого поиска и быстрой сортировкой. С++
- Задача на сортировку структур. Язык C++.
- КОНТРОЛЬНЫЕ ЗАДАНИЯ ПО СОРТИРОВКЕ МАССИВОВ
- С++ Сортировка массива
- Алгоритмы STL, sort, первичный и вторичный ключи для сортировки.
- Программирование, пирамидальная сортировка
- Сортировка выбором. Язык C++. Помощь с кодом.
Это нестандартное расширение C++ - VLA массивы из чистого С. Некоторые компиляторы C++ поддерживают, некоторые нет. Поэтому чтобы на всех компиляторах шло, тогда нужен динамический массив.