zoukankan      html  css  js  c++  java
  • 各种排序算法的C实现

    void BubbleSort(int *pData,int cout )//冒泡算法,可可以加个表示、flag 如果一趟没有元素交换说明已经有序。
    {
        int iTmep=0;
        for (int i=0;i<cout;i++)
            for(int j=1;j<cout-i;j++)
                if (pData[j-1]<pData[j])
                {
                    iTmep=pData[j-1];
                    pData[j-1]=pData[j];
                    pData[j]=iTmep;
                }
    }
    void ExchangeSort(int*pData,int count)
    {
        int iTmep=0;
        for (int i=0;i<count;i++)
            for(int j=i+1;j<count;j++)
                if (pData[j]<pData[i])
                {
                    iTmep=pData[i];
                    pData[i]=pData[j];
                    pData[j]=iTmep;
                }
    }
     1 void SelectSort(int *pData,int n)//选择排序
     2 {
     3     int temp;
     4     int pos;
     5     for (int i=0;i<n-1;i++)
     6     {
     7         temp=pData[i];
     8         pos=i;
     9         for (int j=i+1;j<n;j++)
    10         {
    11             if (pData[j]>temp)
    12             {
    13                 temp=pData[j];
    14                 pos=j;
    15             }
    16         }
    17         pData[pos]=pData[i];
    18         pData[i]=temp;
    19     }
    20 }
     1 void InsertSort(int *pData,int n)//插入排序
     2 {
     3     int temp;
     4     int K;
     5     for (int i=1;i<n;i++)
     6     {
     7         
     8         
     9             K=i-1;
    10             temp=pData[i];
    11             while ((temp<pData[K])&&(K>=0))
    12             {
    13                 pData[K+1]=pData[K];
    14                 K--;//每次执行的时候 K都减去了一; 所以必须重新插入的时候必须包含入内;
    15 
    16             }
    17             pData[K+1]=temp;
    18     
    19     }
    20 
    21 
    22 }

    快速排序 2种

     1 int Partion(int * pData,int Left,int Right)//取头元素为临界分割点
     2 {
     3     int i=Left;
     4     int j=Right;
     5     int Key=pData[Right];
     6     
     7     while (i<j)
     8     {
     9         while(pData[i]<Key&&i<Right)
    10             i++;
    11         pData[j]=pData[i];
    12         while(pData[j]>Key&&j>Left)
    13             j--;
    14         pData[i]=pData[j];
    15     }
    16     pData[i]=Key;
    17     return i;
    18 }
    19 void Quicksort(int *pData,int Left,int Right)
    20 {
    21     if (Left<Right)
    22     {
    23         int k=Partion(pData,Left,Right);
    24         Quicksort(pData,Left,k-1);
    25         Quicksort(pData,k+1,Right);
    26     }
    27     
    28 }
    void QucikSort(int *pData,int Left,int Right)//取中间点为临界点
    {
        int i=Left;
        int j=Right;
        int mid=(Left+Right)/2;
        int Key=pData[mid];
        int Temp=0;
        while (i<j)
        {
            while(pData[i]<Key&&i<Right)
                i++;
            while(pData[j]>Key&&j>Left)
                j--;
            if (i<=j)
            {
                Temp=pData[j];
                pData[j]=pData[i];
                pData[i]=Temp;
                i++;
                j--;
            }
        }
        if (i<Right)
        {
            QucikSort(pData,i,Right);
        }
        if (j>Left)
        {
            QucikSort(pData,Left,j);
        }
  • 相关阅读:
    线性时间将两个有序链表合成一个有序链表(constant additional space)
    C++定义指针数组
    cmd运行java编译文件
    java的方法
    Java流程控制
    用户交互-Scanner
    Java的注释
    编译型语言和解释性语言
    JDK、JRE和JVM
    MarkDown的简单使用
  • 原文地址:https://www.cnblogs.com/HuaiNianCiSheng/p/3270563.html
Copyright © 2011-2022 走看看