Skip to content

Instantly share code, notes, and snippets.

@BeYkeRYkt
Last active November 16, 2016 10:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save BeYkeRYkt/f09f9dad858be404363e3bda3893b610 to your computer and use it in GitHub Desktop.
Save BeYkeRYkt/f09f9dad858be404363e3bda3893b610 to your computer and use it in GitHub Desktop.
Quick and merge sorts
/**
*
* Developed: D3v3l0p3d_0n3
* Copyright (C) 2016 DevelopedInside
*
* WARNING: Codes based from Google requests. I don't known everything.
**/
#include<iostream>
using namespace std;
/**
*a - массив, left - индекс первого элемента, right - индекс последнего элемента
*/
void quickSort(int* a, int left, int right)
{
int temp;
int center = a[left + (right - left) / 2];
int i = left;
int j = right;
while (i <= j)
{
while (a[i] < center) i++;
while (a[j] > center) j--;
if (i <= j)
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
i++;
j--;
}
}
if (i < right)
quickSort(a, i, right);
if (left < j)
quickSort(a, left, j);
}
/**
*a - массив, l - индекс начала первого суб-массива, m - индекс конца первого суб-массива / начала второго суб-массива, r - индекс конца второго суб-массива
*/
void merge(int arr[], int l, int m, int r)
{
int i, j, k;
int n1 = m - l + 1;
int n2 = r - m;
int *L = new int[n1];
int *R = new int[n2];
for (i = 0; i < n1; i++){
L[i] = arr[l + i];
}
for (j = 0; j < n2; j++){
R[j] = arr[m + 1 + j];
}
i = 0;
j = 0;
k = l;
while (i < n1 && j < n2)
{
if (L[i] <= R[j])
{
arr[k] = L[i];
i++;
}
else
{
arr[k] = R[j];
j++;
}
k++;
}
while (i < n1)
{
arr[k] = L[i];
i++;
k++;
}
while (j < n2)
{
arr[k] = R[j];
j++;
k++;
}
}
/**
*a - массив, l - индекс левого конца, r - индекс правого конца
*/
void mergeSort(int arr[], int l, int r)
{
if (l < r)
{
int m = l + (r - l) / 2; //Середина ?
mergeSort(arr, l, m); // левый
mergeSort(arr, m + 1, r); // правый
merge(arr, l, m, r); // ???
}
}
int main(){
setlocale(LC_ALL, "Russian");
int arr[10] = {10, 5, 4, 3, 6, 7, 8, 9, 2, 1};
cout << "Введите 10 чисел " << endl << "-> ";
for (int i = 0; i < 10; i++){
cin >> arr[i];
}
cout << "Введите индекс: " << endl << "0 - быстрая" << endl << "1 - Сортировка слиянием" << endl << "->" ;
int index = 0;
cin >> index;
switch (index){
case 0:
quickSort(arr, 0, 9);
break;
case 1:
mergeSort(arr, 0, 9);
break;
}
for (int i = 0; i < 10; i++){
cout << arr[i] << " ";
}
cout << endl;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment