БлогNot. C++: заполняем динамический массив случайными целыми значениями и реализуем прос...

C++: заполняем динамический массив случайными целыми значениями и реализуем простую сортировку

В коде формируется динамический целочисленный массив, содержащий значения из диапазона [0,range[, затем он сортируется простым "пузырькоподобным" методом и выводится в консоль. Для удобства функции обмена двух значений, сортировки массива и вывода массива в консоль представляют собой шаблоны. Более толковая для больших размерностей сортировка QuickSort показана в этой заметке.

Функция обмена элементов массива назвается swp, а не swap, чтобы избежать конфликта со стандартной и ошибки C2668.

#include <iostream>
#include <cstdlib>
using namespace std;

template <typename T> void swp(T &a, T &b) {
 T c = a; a = b; b = c;
}

template <typename T> T *sort(T *a, int n) {
 for (int i = 0; i < n - 1; i++)
  for (int j = i + 1; j < n; j++)
   if (a[i]>a[j]) swp(a[i], a[j]);
 return a;
}

template <typename T> void print(T *a, int n) {
 cout << endl;
 for (int i = 0; i < n; i++)
  cout << a[i] << (i < n - 1 ? " " : "");
}

int main() {
 const int n = 10;
 const int range = 100;
 int *a = new int[n];
 for (int i = 0; i < n; i++) a[i] = rand() % range;
 print(a, n);
 a = sort(a, n);
 print(a, n);
 cin.sync(); cin.get(); return 0;
}

Если сортировать просто целочисленный массив, код будет таким:

#include <iostream>
#include <cstdlib>
using namespace std;

void swap(int &a,int &b) {
	int c = a; a = b; b = c;
}

int *sort(int *a, int n) {
	for (int i = 0; i < n - 1; i++)
		for (int j = i + 1; j < n; j++)
			if (a[i]>a[j]) swap(a[i], a[j]);
	return a;
}

void print(int *a, int n) {
 cout << endl;
 for (int i = 0; i < n; i++)
	cout << a[i] << (i < n - 1 ? " " : "");
}

int main() {
	const int n = 10;
	const int range = 100;
	int *a = new int[n];
	for (int i = 0; i < n; i++) a[i] = rand() % range;
	print(a, n);
	a = sort(a, n);
	print(a, n);
 cin.sync(); cin.get(); return 0;
}

Не стоит также забывать, что встроенный QuickSort в С++ уже есть, применяя стандартную функцию, мы могли бы написать такой код:

#include <iostream>
#include <cstdlib>
using namespace std;

int compare(const void * a, const void * b) {
 return (*(int *)a > *(int *)b);
 //Поменяли тип указателя, потом взяли значение
}

int main() {
 const int n=6;
 int a[n] = { 4, 1, 10, 9, 2, 5 };
 qsort (a, n, sizeof(int), compare);
 cout << endl;
 for (int i = 0; i < n; i++)
  cout << a[i] << (i<n-1?" ":"");
 cin.get(); return 0;
}

Все коды проверены в консоли Visual Studio 2015.

06.12.2017, 08:10 [2652 просмотра]


теги: c++ алгоритм studio

К этой статье пока нет комментариев, Ваш будет первым