黑马程序员技术交流社区
标题:
试着用C写了个选择排序,冒泡排序还有快排,跟各位分享下
[打印本页]
作者:
楚燮哥哥
时间:
2014-11-23 15:31
标题:
试着用C写了个选择排序,冒泡排序还有快排,跟各位分享下
本帖最后由 楚燮哥哥 于 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);
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2