• 数据结构之各排序算法


    #include <stdio.h>
    
    
    void bubble_sort(int arr[], int n);///稳定
    void insert_sort(int arr[],int n);///稳定
    
    void selection_sort(int arr[],int n);///不稳定
    void quick_sort(int arr[],int start,int end);///不稳定
    
    int main()
    {
    	int a[105];
    	int n;
    	scanf("%d",&n);
    
    	int i;
    	for(i=0;i<n;i++){
    		scanf("%d",&a[i]);
    	}
    	//selection_sort(a,n);
    	//bubble_sort(a,n);
    	//quick_sort(a,0,n-1);
    	insert_sort(a,n);
    	for(i=0;i<n;i++){
    		printf("%d ",a[i]);
    	}
    	printf("
    ");
    }
    
    ///选择排序,时间复杂度O(n^2),是不稳定的,如4 5 5 2 6
    void selection_sort(int arr[],int n)
    {
    	int i;
    	for(i=0;i<n-1;i++){
    		int min = i;
    		int j;
    		for(j=i+1;j<n;j++){
    			if(arr[min] > arr[j]){
    				min = j;
    			}
    		}
    		if(min != i){
    			int tmp;
    			tmp = arr[min];
    			arr[min] = arr[i];
    			arr[i] = tmp;
    		}
    	}
    }
    
    ///冒泡排序,时间复杂度O(n^2),是稳定的
    void bubble_sort(int arr[], int n)
    {
        int i, j, temp;
        for (j = 0; j < n - 1; j++)
            for (i = 0; i < n - 1 - j; i++)
            {
                if(arr[i] < arr[i + 1])
                {
                    temp = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1] = temp;
                }
            }
    }
    
    ///快速排序,时间复杂度O(n*log(n)),是不稳定的
    void swap(int arr[],int i,int j)
    {
        int tmp;
        tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }
    
    void quick_sort(int arr[],int start,int end) ///end代表数组中最后一个元素的位置
    {
        if(start >= end){
            return ;
        }
        int x;
        int i = start;
        int j = end;
        x = arr[start];
    
        while(i != j){
            while(i < j && arr[j] > x){
                j--;
            }
            swap(arr,i,j);
    
            while(i < j && arr[i] <= x){
                i++;
            }
            swap(arr,i,j);
        }
    
        quick_sort(arr,start,i-1);
        quick_sort(arr,i+1,end);
    }
    
    ///插入排序,时间复杂度O(n^2),是稳定的
    void insert_sort(int arr[],int n)
    {
        int i=0;
        int tmp;
        for(i=1;i<n;i++){
            int j = i-1;
            tmp = arr[i];
            while(arr[j] > tmp && j >= 0){
                arr[j+1] = arr[j];
                j--;
            }
            arr[++j] = tmp;
        }
    }
    

      

  • 相关阅读:
    QDUOJ LC的课后辅导 单调递增栈
    蓝桥杯 时间问题
    区间sum 和为k的连续区间-前缀和
    康托展开-全排列的编码与解码
    康托展开-全排列应用
    背包之01背包、完全背包、多重背包详解
    HDU
    辗转相除求最大公约数与最小公倍数
    快速幂(反复平方法)
    HDU
  • 原文地址:https://www.cnblogs.com/ACPIE-liusiqi/p/9670039.html
Copyright © 2020-2023  润新知