现在的位置: 首页 > 综合 > 正文

数据结构–快速、冒泡、选择排序C语言实现

2014年06月12日 ⁄ 综合 ⁄ 共 1275字 ⁄ 字号 评论关闭

#include<stdio.h>
//快速排序
void quickSort(int a[],int left,int right)
{
int i,j,temp;
i = left;
j = right;
temp = a[left];
if(left>right)
return;
while(i!=j)
{
while(a[j]>=temp &&j>i)
j--;
if(j>i)
a[i++] = a[j];
while(a[i]<=temp&&j>i)
i++;
if(j>i)
a[j--] = a[i];
}
a[i] = temp;
quickSort(a,left,i-1);
quickSort(a,i+1,right);
}

//冒泡排序

void bubbleSort(int a[],int len)
{
int i,j,temp;
for(i = 0;i<len;i++)
{   
for(j = 0;j<len-i-1;j++)
{
if(a[j]>a[j+1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1]=a[j];
}
}
}
}
//选择排序算法
void selectSort(int a[],int len)
{
int i,j,temp,min;
for(i = 0;i<len-1;i++)
{
min = i;
for(j = i+1;j<len;j++)
{
if(a[j]<a[min])
min = j;
}
temp = a[min];
a[min] = a[i];
a[i] = temp;
}
}

void main()
{
int i, a[]={2,14,6,3};
int size = sizeof(a)/sizeof(int);
selectSort(a,size);
printf("选择排序之后数组为:\n");
for(i = 0;i<size;i++)
printf("%3d",a[i]);
printf("\n");
quickSort(a,0,size-1);
printf("快速排序之后数组为:\n");
for(i = 0;i<size;i++)
printf("%3d",a[i]);
printf("\n");
bubbleSort(a,size);
printf("冒泡排序之后数组为:\n");
for(i = 0;i<size;i++)
printf("%3d",a[i]);
printf("\n");

}

快速排序:将第一个元素存到临时变量。从最后一个元素依次往前找,直到找到比第一个数小的值,并赋给第一个元素,然后再从第二个元素往后找,直到找到一个比它大的值,赋给它,这也就找到了左边比该值大右边比该值小的所有数。然后递归即可。

冒泡排序:两次for循环,两个相邻的数进行比较,前面的值比后面的大就交换两者数据,直到把最大的值放到最后面,然后在比较除最后一个元素之前的数。比较次数一次减少一个(j<len-i-1)

选择排序:假设第一个元素最小,从第二个元素开始,若比第一个元素小,最第二个元素为最小,依次找到最后,则每次选出最小的放在第一位。

*************************************************************************待续

抱歉!评论已关闭.