• 数据结构&刷题「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;
    } 
    
  • 相关阅读:
    二、JVM — 垃圾回收
    一、JVM — Java内存区域
    四、JVM — 类文件结构
    java 如何重写equal 和hashcode方法(最佳实践)
    Java关于继承中的内存分配
    Linux — 基础知识
    Zookeeper — 应用场景
    分布式服务接口请求的顺序性如何保证?
    如何设计一个高并发系统?
    索引策略
  • 原文地址:https://www.cnblogs.com/yoloyanng/p/12710181.html
Copyright © 2020-2023  润新知