zoukankan      html  css  js  c++  java
  • 排序

    生成测试数组

    #include <iostream>
    #include <cstdio>
    #include <ctime>
    #include <cstdlib>
    #include <cstring>
    using namespace std;
    const int maxn = 1e5+5;
    int a[maxn];
    int n;
    int rand(int n){
    	return random()%n+1;//[1,n]
    }
    void getdata(){
    	scanf("%d",&n);
    	for(int i=0;i<n;i++){
    		a[i] = rand(n);
    	}
    }
    void print(){
    	for(int i=0;i<n;i++){
    		printf("%d ",a[i]);
    	}
    	putchar('
    ');
    }
    int main(){
    	srand(time(0));
    	getdata();
    	print();
    	//sort;
    	print();
    	return 0;
    }
    

    插入排序

    (O(nlogn))

    void insertsort(int l,int r){
    	int i = l, j;
    	while(i <= r){
    		if(a[i] < a[i - 1]){
    			int temp = a[i];
    			j = i;
    			while(j >= 0 && a[j - 1] > temp)a[j] = a[j - 1],j--;
    			a[j] = temp;
    		}
    		i++;
    	}
    }
    

    冒泡排序

    (O(n^{2}))

    void bubble_sort(int *a){
    	for(int i=0;i<n-1;i++){
    		for(int j=0;j<n-i-1;j++){
    			if(a[j]>a[j+1])swap(a[j],a[j+1]);
    		}
    	}
    }
    

    选择排序

    (O(n^{2}))

    void bubble_sort(int *a){
    	int k;
    	for(int i=0;i<n-1;i++){
    		k = i;
    		for(int j=i+1;j<n;j++){
    			if(a[k]>a[j])k = j;
    		}
    		if(k!=i)swap(a[i],a[k]);
    	}
    }
    

    归并排序

    (O(nlogn))

    void merge_sort(int l,int r){
    	if(l == r)return;
    	int mid = (l+r) >> 1;
    	merge_sort(l, mid);
    	merge_sort(mid+1, r);
    	int i = l,j = mid + 1,t = l;
    	while(i <= mid && j <=r){
    		if(a[i] <= a[j])b[t++] = a[i++];
    		else b[t++] = a[j++];
    	}
    	while(i <= mid)b[t++] = a[i++];
    	while(j <= r)b[t++] = a[j++];
    	for(int k = l;k <= r; k++)a[k] = b[k];
    }
    

    快速排序

    堆排序

    (O(nlogn))

    void Heapadjust(int p,int n){//调整该点和该点的所有孩子
    	int temp;
    	temp = a[p];
    	for(int i = 2 * p;i <= n;i *= 2){
    		if(i < n && a[i] < a[i + 1])i++;//找到孩子中较大的
    		if(temp >= a[i])break;
    		a[p] = a[i];
    		p = i;
    	}
    	a[p] = temp;
    }
    void Heapsort(int l,int r){
    	for(int i=n/2;i>0;i--){//构造初始堆
    		Heapadjust(i,n);
    	}
    	for(int i=n;i>1;i--){
    		swap(a[1],a[i]);
    		Heapadjust(1,i - 1);
    	}
    }
    

    希尔排序

    排序的一些概念

    • 稳定排序
    • 不稳定排序
  • 相关阅读:
    -F, --flush-logs
    perl 处理文本
    zookeeer 集群和伪集群模式
    匿名函数和闭包
    perl 读取cookie
    看医疗行业如何建立信息化战略决策
    浅析职业安全感——北漂18年(63)
    perl 面向对象 new方法
    如何去掉MyEclipse中的MyEclipse Derby
    Not enough space svn: zlib (uncompress): buffer error: Decompression of svndiff data failed
  • 原文地址:https://www.cnblogs.com/Emcikem/p/12006643.html
Copyright © 2011-2022 走看看