Почему моя функция сортировки не работает?
В программе все идет правильно, но массивы не сортируются
Что я уже пробовал:
#include <iostream> using namespace std; int price; int n; int* p_array=NULL; int* p_matrix=NULL; void swap(int *i,int *k) { int j;// js any temperory element *i=*k; *k=j; } void sort(int _array[],int n ) { int hole; int i; hole = i; for(int hole=1;hole<n;hole++)> { if( hole>0 && _array[hole-1]>_array[hole]) { swap(_array[hole],_array[hole-1]); hole=hole-1; } } } int main() { p_array=new int[n]; p_matrix=new int[n]; cin >> n; for(int i=0;i<n;i++)> { cin >> *(p_array+i) ; } sort (p_array,n); for(int i=0;i<n;i++)> { *(p_matrix+i)=(*(p_array+i))*(n-i); } sort(p_matrix,n); for(int i=0;i<n;i++)> { cout << *(p_matrix+i)<< " " ; cout << endl; cout << *(p_array+i)<< " " ; } }
Andreas Gieriet
Скомпилировать со всеми предупреждениями о!
Напр. n
не задан, но вы создаете массив с помощью n
элементы...
Почему вы используете арифметику указателей, когда вы могли бы сделать это с гораздо меньшей болью с индексами массива? Напр. cin >> p_array[i];
Овации
Энди
Philippe Mori
- Не используйте глобальные переменные.
- Инициализируйте свои переменные при их объявлении, если известно начальное значение. В противном случае объявите переменную непосредственно перед ее инициализацией.
- Используйте соответствующие интервалы между операторами.
- Не начинайте имя с подчеркивания (зарезервировано для системного использования).
- Удалите выделенную Вами память. А еще лучше использовать std:: vector вместо raw array.
- Предпочитайте нотацию массива нотации указателя.
- Используйте последовательный интервал между функциями (всегда 1 строка или всегда 2 строки).
Кстати, если бы вы написали модульный тест для своей функции swap, вы бы увидели, что она работает не так, как ожидалось. Используя отладчик, вы бы увидели проблему. Но для целей обучения, вероятно, лучше всего использовать карандаш и бумагу.