快速排序:
void quick_sort(int arr,int l,int r){
if(l>=r) //如果数组长度只有一,直接返回;
return 0;
int mid=arr[l+(l-r)/2]; //也可以写成(l+r)/2,但是可能会出现l+r后数据范围超出int范围,
int i=l-1,j=r+1; //这样写比较稳
while(i<j){
do i++;while(arr[i]<mid);
do j--;while(arr[j]>mid);
if(i<j){
int t=arr[i];
arr[i]=arr[j];
arr[j]=t;
}
}
quick_sort(arr,l,j);
quick_sort(arr,j+1,r);
}
快排的时间复杂对为O(nlogn)且为不稳定排序 ;
归并排序:
#include<iostream>
#include<algorithm>
using namespace std;
#define N 10010
int n;
int a[N];
int tmp[N];
void merge(int l, int r, int mid)
{
int i = l;
int j = mid + 1;
int t = 0;
while (i <= mid && j <= r)
{
if (a[i] <= a[j])
{
tmp[t] = a[i];
t++;
i++;
}
else if (a[i] > a[j])
{
tmp[t] = a[j];
t++;
j++;
}
}
while (i <= mid)
{
tmp[t] = a[i];
t++;
i++;
}
while (j <= r)
{
tmp[t] = a[j];
t++;
j++;
}
t = 0;
int L = l;
for (; L <= r; L++)
{
a[L] = tmp[t];
t++;
}
}
void mergeSort(int l, int r)
{
if (l < r)
{
int mid = (l + r )/2;
mergeSort(l, mid);
mergeSort(mid + 1, r);
merge(l, r, mid);
}
}
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
}
mergeSort(1, n);
for (int i = 1; i <= n; i++)
{
cout << a[i] << " ";
}
return 0;
}