您的位置:首页 > 其它

选择,冒泡,快速排序

2015-10-23 20:41 246 查看
排序算法是算法中比较基础的,在这里先对三种最简单的排序算法做个总结。

一、选择排序

大致思路为:依次选择无序区的最小值和无序区的第一个值交换。

代码:

void exchange(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
return;
}
void selection_sort(int a[],int len)
{
int i,j;
for(i=0;i<len-1;i++)
for(j=i+1;j<len;j++)
if(a[j]<a[i])
exchange(&a[i],&a[j]);
return;
}


时间复杂度为n^2。

二、冒泡排序

大致思路:就像冒泡泡一样,轻的向上浮,重的向下沉。

代码:

void bubble_sort(int a[],int len)
{
int i,j;
for(i=0;i<len-1;i++)
for(j=0;j<len-1-i;j++)
if(a[j]>a[j+1])
exchange(&a[j],&a[j+1]);
return;
}


时间复杂度为n^2。

三、快速排序

思路:选定一个基准值,使所有比它小的数在它左边,比它大的数在右边。

代码:

void quick_sort(int a[],int left,int right)
{
if(left>=right)
return;
int i=left;
int j=right;
int key=a[left];
while(i<j)
{
while(i<j&&key<=a[j])
j--;
if(i<j)
a[i++]=a[j];
while(i<j&&key>a[i])
i++;
if(i<j)
a[j--]=a[i];
}
a[i]=key;
quick_sort(a,left,i-1);
quick_sort(a,i+1,right);
}


时间复杂度为nlgn。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: