A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 楚燮哥哥 于 2014-11-23 15:37 编辑

刚学C语言,实现起来有点勉强,有什么可以优化的地方还请各位大神指出
#include<stdio.h>
//输出数组
void printNum(int s[],int len);
//交换两个变量的值
void swap(int *a,int *b);
//选择排序
void selectSort(int s[],int len);
//冒泡排序
void bubbleSort(int s[],int len);
//快速排序
int Partition(int r[],int first,int end);
void QuickSort(int r[],int first,int end);
int main()
{
        int s[5]={2,5,3,1,4};
        //选择排序
//        selectSort(s,5);
        //冒泡排序
//        bubbleSort(s,5);
        //快速排序
        QuickSort(s,0,4);
        printNum(s,5);
        
        return 0;
}
void printNum(int s[],int len)
{
        for(int i=0;i<len;i++)
        {
                printf("%d ",s
);
        }
        printf("\n");
        
}
void swap(int *a,int *b)
{
        int temp;
        temp=*a;
        *a=*b;
        *b=temp;
}
/**逐个比较,每一次把最小的依次往前面放*/
void selectSort(int s[],int len)
{
        
        for(int i=0;i<len;i++)
        {
                for(int j=i;j<len;j++)
                {
                        if(s
>s[j])
                                swap(&s
,&s[j]);
                }
        }        

}
/**先将第一个值和第二个值比较,如果第一个值大于第二个值则互相交换,然后比较第二个和第三个依次类推,目的是将最大的值往后面放*/
void bubbleSort(int s[],int len)
{

        int i,j;
        
        for(i=0;i<len;i++)
        {               
                for(j=0;j<len-i;j++)
                {
        
                        if(s[j]>s[j+1])
                                swap(&s[j],&s[j+1]);
                        
                }
        }
}

/**取序列的中间值*/
int Partition(int r[],int first,int end)
{
     int temp = 0;
     int i=first;
     int j=end;
     while(i<j)
     {
          //右侧扫描,直到结束或者r
>r[j]
          while(i<j&&r
<=r[j])
               j--;
                  //交换两个值
          if(i<j)
          {
               swap(&r[j],&r
);
               i++;
          }
          //进行左侧扫描
          while(i<j&&r
<=r[j])
               i++;
          if(i<j)
          {
                          swap(&r[j],&r
);
              j--;
          }

     }
     return i;     //i为轴值记录的最终位置

}
/**利用递归的思想,不停的对数组进行划分排序*/
void QuickSort(int r[],int first,int end)
{
     if(first<end)
     {
          int pivot=Partition(r,first,end);     //一次划分结束
          QuickSort(r,first,pivot-1);          //对左侧序列进行快速排序
          QuickSort(r,pivot+1,end);
     }
}

评分

参与人数 1黑马币 +1 收起 理由
星河鹭起 + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马