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;
    }
    

      







     
     
  • 相关阅读:
    Delphi内JPG与BMP的互相转换
    通过设置数据单元格的hint和ToolTips属性,当移动鼠标到该单元格时,可以显示单元格容纳不下的文本内容...
    delphi内进行音量控制及静音
    误把TXT文件关联设成CMD的解决办法
    精通批处理教程
    我的Qzone第一天
    寻找第K大的数的方法总结
    算法的力量(李开复)
    HDOJ 1001
    添加收藏夹
  • 原文地址:https://www.cnblogs.com/wc1903036673/p/3499008.html
Copyright © 2011-2022 走看看