数据结构&刷题「1」

洛谷排序算法题单: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;
} 
原文地址:https://www.cnblogs.com/yoloyanng/p/12710181.html