zoukankan      html  css  js  c++  java
  • C语言排序

    排序算法

    快速排序

    C语言快速排序qsort(数组,长度,元素大小,cmp函数(*,*))//注意函数cmp的参数为指针

    #include <stdio.h>
    #include <stdlib.h>
    #include <stdlib.h>   //qsort函数
    int cmp (int a,int b)
    {
        return a -b;
    }
     
    //0 3 2 1 4 5 6 9 8 7
    int main()
    {
        inta[10],i,x;
        for(i=0;i<10; i++)
        {
           scanf("%d",&a[i]);
        }
       qsort(a,10,sizeof(a[0]),cmp);
        for(i=0;i<10; i++)
        {
          printf("%d ",a[i]);
        }
        return 0;
    }
    自定义qsort
     
    void qsort2(int a[],int l,int r){
        if(l<r){
            inti=l,j=r;
            intk=a[i];
           while(i<j){
               while(i<j&&a[j]>=k){
                   j--;
                }
                a[i]=a[j];
               while(i<j&&a[i]<=k){
                   i++;
                }
               a[j]=a[i];
            }
            a[i]=k;
           qsort2(a,l,i-1);
           qsort2(a,i+1,r);
        }
    }

    冒泡排序

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

    归并排序

    void merge(int a[],int l,int m,int r){
        inttemp[r-l+1];
        inti=l,j=m+1,k=0;
       while(i<=m&&j<=r){
           if(a[i]<a[j])temp[k++]=a[i++];
            elsetemp[k++]=a[j++];
        }
       while(i<=m){
           temp[k++]=a[i++];
        }
       while(j<=r){
           temp[k++]=a[j++];
        }
       for(i=0;i<k;i++){
           a[l+i]=temp[i];
        }
    }
     
    void mergeSort(int a[],int l,int r){
        if(l<r){
            intm=(l+r)/2;
           mergeSort(a,l,m);
           mergeSort(a,m+1,r);
           merge(a,l,m,r);
        }
    }

    选择排序

    void selectSort(int a[],int n){
        int i,j;
       for(i=0;i<n;i++){
            intk=i;
           for(j=i+1;j<n;j++){
               if(a[j]>a[k]){
                   k=j;
                }
               if(k!=i){
                   int t=a[i];
                   a[i]=a[k];
                   a[k]=t;
                }
            }
        }
     
    }

    堆排序

    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct heap_t{
           int *arr;         //point for an array to store heap value.
           intheapMaxIndex; //heap element max indexnumber
           intarrLength; //array length of arr
     
    }Heap;
     
     
    void printArr(int *p, int size)
    {
           int i;
           for(i=0;i<size;i++)
           {
                  printf("%d",p[i]);
           }
    }
     
    void maxHeapify(Heap *hp, unsigned int nodei)
    {
           unsignedint l = (nodei+1) << 1 - 1;  //leftchild = 2i-1, -1 ?:arr[0..n-1]
           unsignedint r = (nodei+1) << 1 ;      //right child = 2i
           unsignedint largest = 0;
           intheapMaxI = hp->heapMaxIndex;
     
           if(l<= heapMaxI && hp->arr[l] > hp->arr[nodei])
                  largest= l ;
           else
                  largest= nodei ;
     
           if(r<= heapMaxI && hp->arr[r] > hp->arr[largest])
                  largest= r ;
     
           if(largest!=nodei)
           {
                  //exchange
                  inttmp ;
                  tmp= hp->arr[largest];
                  hp->arr[largest]= hp->arr[nodei];
                  hp->arr[nodei]= tmp;
     
                  maxHeapify(hp,largest);
           }else{
                  return;
           }
     
    }
     
     
    Heap *createHeap(int *arrp, int arrLength,Heap *heap)
    {
     int i;
     heap->arr =arrp;
     heap->heapMaxIndex = arrLength-1;
     heap->arrLength = arrLength;
     
     //for an heapa[0..n-1]; a[(n/2)..n-1] all are leaves
     for(i =arrLength>>1-1; i >=0; i--)
     maxHeapify(heap,i);
     return heap;
    }
     
     
    void heapSort(Heap *hp)
    {
           int tmp;
           int last;
           while(hp->heapMaxIndex>0)
           {
                  last= hp->heapMaxIndex ;
                  //exchange
                  tmp= hp->arr[last];
                  hp->arr[last]= hp->arr[0];
                  hp->arr[0]= tmp;
                  hp->heapMaxIndex-= 1;
                  maxHeapify(hp,0); //make heap from root node 0 to heapMaxIndex
           }
     
    }
     
    int main()
    {
           inta[]={15,25,32,23,1,-4,35,2,-85,42,0,12,26,56,45,12,145,17,25,21};
           printArr(a,20);
           printf("
    ");
     
           Heaphpa,*phpa;
           phpa=  createHeap(a,20,&hpa);
           heapSort(phpa);
     
           printArr(a,20);
           putchar('
    ');
           return 0;
    }


  • 相关阅读:
    Java实现 LeetCode 833 字符串中的查找与替换(暴力模拟)
    Java实现 LeetCode 833 字符串中的查找与替换(暴力模拟)
    Java实现 LeetCode 833 字符串中的查找与替换(暴力模拟)
    Java实现 LeetCode 832 翻转图像(位运算)
    Java实现 LeetCode 832 翻转图像(位运算)
    Java实现 LeetCode 832 翻转图像(位运算)
    Java实现 LeetCode 831 隐藏个人信息(暴力)
    Java实现 LeetCode 831 隐藏个人信息(暴力)
    Java实现 LeetCode 831 隐藏个人信息(暴力)
    how to use automapper in c#, from cf~
  • 原文地址:https://www.cnblogs.com/jasonhaven/p/7355013.html
Copyright © 2011-2022 走看看