本帖最后由 楚燮哥哥 于 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); 
     } 
} 
 
 |