| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 9219 人关注过本帖, 14 人收藏
标题:常用的六种排序
只看楼主 加入收藏
烟雨晨曦
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:150
专家分:599
注 册:2017-3-5
结帖率:100%
收藏(14)
 问题点数:0 回复次数:34 
常用的六种排序
1.好久没写排序了,基本上用的就是map,vector,今天整理了下排序算法,
下面我基本用的很简洁的代码了,希望能帮到大家。
程序代码:
#include<stdio.h>
#include<malloc.h>
void Swap(int a[],int i,int j)
{
    int temp=a[i];
    a[i]=a[j];
    a[j]=temp;
}

//冒泡排序
void BubbleSorting(int a[],int len)
{
   for(int i=0;i<len;i++)
   {
       for(int j=i+1;j<len;j++)
       {
           if(a[i]>a[j])
           {
              Swap(a,i,j);
           }
       }
   }
}

//选择排序
void SelectSorting(int a[],int len)
{
     for(int i=0;i<len;i++)
     {
         int k=i;
         int temp=a[k];
         for(int j=i+1;j<len;j++)
         {
             if(a[j]<temp)
             {
                temp=a[j];
                k=j;
             }
         }
         Swap(a,i,k);
     }
}

//插入排序
void InsertSorting(int a[],int len)
{
    for(int i=1;i<len;i++)
    {
        int k=i;
        int temp=a[k];
        for(int j=i-1;(j>=0)&&(a[j]>temp);j--)
        {
            a[j+1]=a[j];
            k=j;
        }
        a[k]=temp;
    }
}

//希尔排序
void ShellSorting(int a[],int len)
{
     int gap=len;
     do
     {
        gap/=2;
        for(int i=gap;i<len;i++)
        {
           int k=i;
           int temp=a[k];
           for(int j=i-gap;(j>=0)&&(a[j]>temp);j-=gap)
           {
                a[j+gap]=a[j];
                k=j;
           }
           a[k]=temp;
        }
     }while(gap>0);
}

//快速排序
int Pos(int a[],int low,int high)
{
     int i=low;
     int j=high;
     int k=a[low];
     while(i<j)
     {
          while(a[j]>k) j--;
          Swap(a,i,j);
          while(a[i]<k) i++;
          Swap(a,i,j);
     }
     return i;
}

void QSorting(int a[],int low,int high)
{  
       if(low<high)
       {
         int pos=Pos(a,low,high);
         QSorting(a,low,pos);
         QSorting(a,pos+1,high);
       }
}

void QuickSorting(int a[], int len)
{
    QSorting(a, 0, len-1);
}

//归并排序
void MergerSorting(int a[],int des[],int low,int mid,int high)
{
     int i=low;
     int j=mid+1;
     int k=low;
     while((i<=mid)&&(j<=high))
     {
           if(a[i]<a[j]) des[k++]=a[i++];
           else des[k++]=a[j++];
     }
     while(i<=mid) des[k++]=a[i++];
     while(j<=high) des[k++]=a[j++];
}

void MSorting(int a[],int des[],int low,int high,int max)
{
    if(low==high)
    {
         des[low]=a[low];
    }
    else
    {
      int mid=(low+high)/2;
      int* space=(int*)malloc(sizeof(int)*max);
      if(space!=NULL)
      {
          MSorting(a,space,low,mid,max);
          MSorting(a,space,mid+1,high,max);
          MergerSorting(space,des,low,mid,high);
          free(space);
      }
    }
}

void MerSorting(int a[],int len)
{
    MSorting(a,a,0,len-1,len);
}

void ShowSorting(int a[], int len)
{
    for(int i=0;i<len;i++)
    {
        printf("%d ", a[i]);
    }
    printf("\n");
}

int main()
{
    int a[]={1,5,21,20,31,2,15,100};
    int len=sizeof(a)/sizeof(*a);
    //BubbleSorting(a,len);
    //SelectSorting(a,len);
    //InsertSorting(a,len);
    //ShellSorting(a,len);
    //QuickSorting(a,len);
    MerSorting(a,len);
    ShowSorting(a,len);
    return 0;
}
搜索更多相关主题的帖子: color 
2017-04-22 12:05
marlow
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:125
专家分:419
注 册:2016-7-18
收藏
得分:0 
还有堆排序和基数排序。刚花了一个星期学习排序,烧了不少脑细胞、、、

一切都在学习、尝试、摸索中
2017-04-22 15:02
bjut_Allen
Rank: 9Rank: 9Rank: 9
来 自:平乐园工业技术学校
等 级:蜘蛛侠
威 望:8
帖 子:323
专家分:1223
注 册:2016-10-16
收藏
得分:0 
赞一个

Code is my life.
2017-04-22 16:52
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
标记

DO IT YOURSELF !
2017-04-22 19:33
LG隐
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:67
专家分:198
注 册:2016-4-20
收藏
得分:0 
2017-04-22 22:47
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
顶~~~~~~~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-04-22 23:11
an103337
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2017-4-23
收藏
得分:0 
2017-04-23 10:13
zsh981022984
Rank: 3Rank: 3
来 自:湖南
等 级:论坛游侠
威 望:6
帖 子:36
专家分:153
注 册:2015-12-6
收藏
得分:0 
看一看。。

因为有了因为,所以有了所以,既然已成既然,何必再说何必
2017-04-23 11:45
sunb3
Rank: 2
来 自:北京
等 级:论坛游民
威 望:3
帖 子:34
专家分:94
注 册:2017-4-20
收藏
得分:0 
马克,一点点理解中……

除了基础……我什么都不会……
2017-04-24 08:34
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
顶起。希尔排序还没有消化掉。
2017-04-25 13:32
快速回复:常用的六种排序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017996 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved