各种排序算法的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);
    }
原文地址:https://www.cnblogs.com/HuaiNianCiSheng/p/3270563.html