应天论坛

 找回密码
 参与我们

QQ登录

只需一步,快速开始

搜索
查看: 720|回复: 0

常用的六种排序

[复制链接]

68

主题

72

帖子

451

积分

少校

勘查大队长

Rank: 6Rank: 6

积分
451
发表于 2017-4-28 18:59:44 | 显示全部楼层 |阅读模式
常用的六种排序
[mw_shl_code=applescript,true]#include<stdio.h>
#include<malloc.h>
void Swap(int a[],int i,int j)
{
    int temp=a;
    a=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>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<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<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);
    }
    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;
}[/mw_shl_code]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 参与我们

本版积分规则

QQ|Archiver|手机版|小黑屋|应天社区 ( 湘ICP备17015224号 )

GMT+8, 2024-4-20 21:08 , Processed in 0.953107 second(s), 25 queries .

Powered by Discuz!

© 2001-2017 Comsenz Inc.


免责声明:
本站所发布的第三方软件及资源(包括但不仅限于文字/图片/音频/视频等仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢某程序或某个资源,请支持正版软件及版权方利益,注册或购买,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To: admin@yzqz.cn

快速回复 返回顶部 返回列表