1076 排序
给出n和n个整数,希望你从小到大给他们排序。
自己写冒泡复杂度n方肯定超时了。stl sort可以a,但是自己不太建议这么来。高级题解里1.快排 2.qsort 3.归并排序
1.快排
#include<iostream>
using namespace std;
int Partition(int r[], int first, int end) //划分
{
int i = first, j = end;
while(i<j)
{
while(i<j && r[i]<=r[j]) j--; //右侧扫描
if(i<j)
{
int temp=r[i]; r[i]=r[j]; r[j]=temp; //将较小记录交换到前面
i++;
}
while(i<j && r[i]<=r[j]) i++; //左侧扫描
if(i<j)
{
int temp=r[j]; r[j]=r[i]; r[i]=temp; //将较大记录交换到后面
j--;
}
}
return i; //返回轴值记录的位置
}
void QuickSort(int r[], int first, int end) //快速排序
{
int pivot;
if(first<end)
{
pivot=Partition(r,first,end);
QuickSort(r,first,pivot-1);
QuickSort(r,pivot+1,end);
}
}
void Input(int r[], int n)
{
for( int i=0; i<n; i++ )
cout<<r[i]<<" ";
cout<<endl;
}
int main()
{
int n, r[100000];
cin>>n;
for( int i=0; i<n; i++)
cin>>r[i];
QuickSort(r,0,n-1);
Input(r,n);
return 0;
}
2.qsort
#include <stdio.h>
#include <stdlib.h>
int cmpfunc (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
int main()
{
int ran[100000],n=0,i=0,t=0,j=0;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&ran[i]);
qsort(ran, n, sizeof(int), cmpfunc);
for( t = 0 ; t < n; t++ ) {
printf("%d ",ran[t]);
}
return(0);
}
3.分治
#include <bits/stdc++.h>
using namespace std;
void merge(int *data, int p, int q, int r) {
int n1, n2, i, j, k;
int *left=NULL, *right=NULL;
n1 = q-p+1;
n2 = r-q;
left = (int *)malloc(sizeof(int)*(n1));
right = (int *)malloc(sizeof(int)*(n2));
for(i=0; i<n1; i++)
left[i] = data[p+i];
for(j=0; j<n2; j++)
right[j] = data[q+1+j];
i = j = 0;
k = p;
while(i<n1 && j<n2) {
if(left[i] <= right[j])
data[k++] = left[i++];
else
data[k++] = right[j++];
}
for(; i<n1; i++)
data[k++] = left[i];
for(; j<n2; j++)
data[k++] = right[j];
}
void msort(int *data, int p, int r) {
int q;
if(p < r) {
q = (int)((p+r)/2);
msort(data, p, q);
msort(data, q+1, r);
merge(data, p, q, r);
}
}
int main() {
int n;
int* input = NULL;
cin>>n;
input = (int *)malloc(sizeof(int)*(n));
for(int i=0; i<n; ++i) {
cin>>input[i];
}
msort(input,0,n-1);
for(int i=0; i<n; ++i)
cout<<input[i]<<" ";
cout<<endl;
return 0;
}
。