zoukankan      html  css  js  c++  java
  • c语言 快速排序---归并排序----堆排序

    //快速排序:
    
    #include <stdio.h>
    #define MAX 500000
    int s[MAX];
    void Q_Sort(int start,int end)
    {
        int i,j,t;
        if ( start >= end ) return ;
        t = s[start];
        i = start;
        j = end;
        while ( i < j)
        {
            while ( s[j] >= t && i < j)
            {
                j--;
            }
            s[i] = s[j];
            while ( s[i] <= t && i < j)
            {
                i++;
            }
            s[j] = s[i];
        }
        s[i] = t;
        Q_Sort(start,i-1);
        Q_Sort(i+1,end);
    }
    int main()
    {
        int i,n;
        while (scanf("%d",&n),n)
        {
            for ( i = 0 ; i < n ; i++)
            {
                scanf("%d",&s[i]);
            }
            Q_Sort(0,n-1);
        }
        return 0;
    }
    

      






    //归并排序 #include <stdio.h> #define MAX 500000 int a[MAX]; int b[MAX]; void Merge(int left,int mid,int right) { int i,j,k; i = left; j = mid+1; k = left; while ( i <= mid && j <= right ) { if ( a[i] <= a[j] ) { b[k++] = a[i++]; } else { b[k++] = a[j++]; } } while ( i <= mid ) { b[k++] = a[i++]; } while ( j <= right ) { b[k++] = a[j++]; } } void MergeSort(int left,int right) { int i,mid; if ( left < right ) { mid = ( left + right ) / 2 ; MergeSort(left , mid); MergeSort(mid+1 , right); Merge(left,mid,right); for ( i = left ; i <= right ; i++) { a[i] = b[i]; } } } int main() { int i,n; while (scanf("%d",&n),n) { for ( i = 0 ; i < n ; i++) { scanf("%d",&a[i]); } MergeSort(0,n-1); } return 0; }         

      




    //堆排:
    
    #include <stdio.h>
    #define MAX 500000
    int s[MAX];
    void Heapify(int x,int n)
    {
        if ( x*2+1 <= n)
        {
            if ( s[x] == s[2*x] && s[x] == s[2*x+1] ) return ;
            if ( s[2*x] > s[x] && s[2*x] > s[2*x+1] )
            {
                s[2*x] ^= s[x] ^= s[2*x] ^= s[x] ;
                Heapify(2*x,n);
            }
            else if ( s[2*x+1] > s[x] && s[2*x+1] > s[2*x] )
            {
                s[2*x+1] ^= s[x] ^= s[2*x+1] ^= s[x] ;
                Heapify(2*x+1,n);
            }
            else if ( s[2*x+1] == s[2*x] && s[2*x] > s[x])
            {
                s[2*x] ^= s[x] ^= s[2*x] ^= s[x];
                Heapify(2*x,n);
            }
        }
        else if ( x*2 == n )
        {
            if ( s[2*x] > s[x] )
            {
                s[2*x] ^= s[x] ^= s[2*x] ^= s[x] ;
                Heapify(2*x,n);
            }
        }
    }
    void HeapSort(int n)
    {
        int i,k;
        for ( i = n/2 ; i >= 1 ; i--)
        {
            Heapify(i,n);
        }
        for ( k = n ; k > 1 ; k--)
        {
            s[k] ^= s[1] ^= s[k] ^= s[1];
            Heapify(1,k-1);
        }
    }
    int main()
    {
        int i,n;
        while (scanf("%d",&n),n)
        {
            for ( i = 1 ; i <= n ; i++)
            {
                scanf("%d",&s[i]);
            }
            HeapSort(n);
            for ( i = 1 ; i <= n ; i++)
            {
                if ( i != n ) printf("%d ",s[i]);
                else printf("%d
    ",s[i]);
            }
        }
        return 0;
    }
    

      







     
     
  • 相关阅读:
    【LeetCode】048. Rotate Image
    【LeetCode】036. Valid Sudoku
    【LeetCode】060. Permutation Sequence
    【LeetCode】001. Two Sum
    【LeetCode】128. Longest Consecutive Sequence
    【LeetCode】081. Search in Rotated Sorted Array II
    【LeetCode】033. Search in Rotated Sorted Array
    顺时针打印矩阵
    矩形覆盖
    二维数组中的查找
  • 原文地址:https://www.cnblogs.com/wc1903036673/p/3499008.html
Copyright © 2011-2022 走看看