洛谷排序算法题单:https://www.luogu.com.cn/training/107#problems
P1271 【深基9.例1】选举学生会
冒泡排序—TLE
#include<stdio.h>
#define MAXN 2000000
int num[MAXN];
int main(){
int a,b,temp;
scanf("%d%d",&a,&b);
for(int i=0;i<b;i++)
scanf("%d",&num[i]);
for(int j=0;j<b;j++){
for(int k=0;k<b-1;k++){
if(num[k]>num[k+1]){
temp = num[k];
num[k] = num[k+1];
num[k+1] = temp;
}
}
}
for(int i=0;i<b;i++){
printf("%d ",num[i]);
}
return 0;
}
计数排序
#include<stdio.h>
int main(){
int n,m;
scanf("%d%d",&n,&m);
int a[n+1]={0},num[m],temp[m];
for(int i=0;i<m;i++)
scanf("%d",&num[i]);
// 计算每个元素的个数放入数组a中
for(int j=0;j<m;j++)
a[num[j]]++;
// 依次累加
for(int k=1;k<=n;++k)
a[k] = a[k-1]+a[k];
// 排序
for(int i=m-1;i>=0;--i){
int index = a[num[i]]-1;
temp[index] = num[i];
a[num[i]]--;
}
for(int i=0;i<m;i++){
printf("%d ",temp[i]);
}
return 0;
}
P1177 【模板】快速排序
快速排序1—TLE
#include<stdio.h>
int A[100001];
int partition(int left,int right){
int pivot = A[right];
int i = left;
for(int j=left;j<=right;j++){
if(A[j] < pivot){
int temp = A[i];
A[i] = A[j];
A[j] = temp;
i++;
}
}
int temp = A[i];
A[i] = A[right];
A[right] = temp;
return i;
}
void quick_sort(int left,int right){
if(left >= right)
return;
int q = partition(left,right);
quick_sort(left,q-1);
quick_sort(q+1,right);
}
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&A[i]);
}
quick_sort(0, n-1);
for(int j=0;j<n;j++)
printf("%d ",A[j]);
return 0;
}
// 超出时间
快速排序2
#include<stdio.h>
int A[100001];
void quick_sort(int left,int right){
int i,j,tmp,pivot;
i = left;
j = right;
pivot = A[(i+j)/2];
while(i < j){
while(A[j] > pivot) --j;
while(A[i] < pivot) ++i;
if(i <= j){
tmp = A[i];
A[i] = A[j];
A[j] = tmp;
--j;++i;
}
}
if(left < j) quick_sort(left,j);
if(i < right) quick_sort(i,right);
}
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&A[i]);
}
quick_sort(0, n-1);
for(int j=0;j<n;j++)
printf("%d ",A[j]);
return 0;
}