Ошибка при работе с массивом

Ошибка при работе с массивом

Выдает ошибку Run-Time Check Failure #2 — Stack around the variable 'a' was corrupted. По заданию нужно сделать: Данная последовательность из 20 целых чисел, заполненная в промежутке [1; 20]. Отсортировать первые 10 элементов последовательности по возрастанию, последние 10 — наоборот (используя алгоритм быстрой сортировки).

include <iostream>

include <ctime>

using namespace std;

void Set(int array[], int n);
void Print(int array[], int n);
void quickSort(int mas[], int n);

int main()
{
const int s = 20;
srand(time(NULL));
int a[s];
Set(a, s);
Print(a, s);
cout << «\n»;
quickSort(a, s);
Print(a, s);
system(«pause»);
return 0;
}

void Set(int array[], int n)
{
for (int i = 0; i < n; i++)
array[i] = rand() % 20 + 1;
}

void Print(int array[], int n)
{
for (int i = 0; i < n; i++)
{
cout << array[i] << « | »;
}
}

void quickSort(int mas[], int n)
{
int m = mas[n / 2], i = 0, j = n;
do
{
while (mas[i] < m)
i++;
while (mas[j] > m)
j--;
if (i <= j)
{
int temp = mas[i];
mas[i] = mas[j];
mas[j] = temp;
i++;
j--;
}
}
while (i <= j);
if (i < n)
quickSort(mas + i, n — i);
if (j > 0)
quickSort(mas, j);
}

Вылезаете за границу массива.

int m = mas[n / 2], i = 0, j = n - 1;  // см. j

Реализацию quickSort см. на Викискладе.

А вообще-то говоря, есть стандартная функция qsort(). Может и не надо велосипед изобретать?

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.