// sort.cpp : 定义控制台应用程序的入口点。
//
#include <iostream>
#include <algorithm>
using namespace std;
const int MAX = 100000;
int a[MAX];
void buddleSort(int* a, int L)
{
for (int i = 1; i < L; i++)
{
int flag = 0;
for (int j = 0; j < L - i; j++)
{
if (a[j] > a[j + 1])
{
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
flag = 1;
}
}
if (flag)
break;
}
}
void insertSort(int* a, int N)
{
int i, j;
for (i = 1; i < N; i++)
{
int temp = a[i];
for (j = i; a[j - 1] > temp && j >= 1; j--)
{
a[j] = a[j - 1];
}
a[j] = temp;
}
}
void shellSort(int* a, int L)
{
int i, j, d;
for (d = L / 2; d > 0; d /= 2)
{
for (i = d; i < L; i++)
{
int temp = a[i];
for (j = i; j >= d && a[j - d] > temp; j -= d)
a[j] = a[j - d];
a[j] = temp;
}
}
}
void merge(int* a, int* tempA, int L, int R, int rightEnd)
{
int i = L, j = R, k = L;
while (i <= R - 1 && j <= rightEnd)
{
if (a[i] <= a[j])
{
tempA[k] = a[i];
k++;
i++;
}
else
{
tempA[k] = a[j];
k++;
j++;
}
}
while (i <= R - 1)
{
tempA[k] = a[i];
k++;
i++;
}
while (j <= rightEnd)
{
tempA[k] = a[j];
k++;
j++;
}
for (int p = L; p <= rightEnd; p++)
{
a[p] = tempA[p];
}
}
void msort(int* a, int* tempA, int L, int rightEnd)
{
if (L < rightEnd)
{
int center = (L + rightEnd) / 2;
msort(a, tempA, L, center);
msort(a, tempA, center + 1, rightEnd);
merge(a, tempA, L, center + 1, rightEnd);
}
}
void mergeSort(int* a, int N)
{
int* tempA;
tempA = new int[MAX];
if (tempA != nullptr)
{
msort(a, tempA, 0, N - 1);
delete tempA;
}
}
void swap(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
int median3(int* a, int left, int right)
{
int center = (left + right) / 2;
if (a[left] > a[center])
swap(&a[left], &a[center]);
if (a[left] > a[right])
swap(&a[left], &a[right]);
if (a[center] > a[right])
swap(&a[center], &a[right]);
swap(&a[center], &a[right - 1]);
return a[right - 1];
}
void Qsort(int* a, int left, int right)
{
if (left < right)
{
int pivot = median3(a, left, right);
int low = left, high = right - 1;
while (true)
{
while (a[++low] < pivot);
while (a[--high] > pivot);
if (low < high)
swap(&a[low], &a[high]);
else
break;
}
swap(&a[low], &a[right - 1]);
Qsort(a, left, low - 1);
Qsort(a, low + 1, right);
}
}
void quickSort(int* a, int N)
{
Qsort(a, 0, N - 1);
}
int main()
{
int N;
cin >> N;
for (int i = 0; i < N; i++)
cin >> a[i];
// buddleSort(a, N);
// insertSort(a, N);
// shellSort(a, N);
// sort
// sort(a, a + N);
//mergeSort(a, N);
quickSort(a, N);
for (int i = 0; i < N; i++)
{
cout << a[i];
if (i < N - 1)
cout << " ";
}
return 0;
}
10-31
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交