您的位置:首页 > 其它

排序算法--选择+冒泡及其改进

2015-04-07 21:27 197 查看
void Bubble(int a[],int n) { int i,j; for (i=0;i<=n-2;i++){ for (j=0;j<=n-2-i;j++){ if (a[j+1]<a[j]){ swap(a[j+1],a[j]); } } } for (i=0;i<=n-1;i++){ printf("%3d",a[i]); } printf("\n"); }

#include "stdio.h"
#include "stdlib.h"

void swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}

void SelectSort(int a[],int n)
{
int i,j,min;
for (i=0;i<n;i++){
min=i;
for (j=i+1;j<=n-1;j++){
if (a[min]>a[j])
min=j;
}
if (min!=i)
swap(&a[min],&a[i]);
}
}

void BubbleSort1(int a[],int n)
{
//两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。
int i,j;
for (i=0;i<n;i++){
for (j=i+1;j<=n-1;j++){
if (a[i]>a[j])
swap(&a[i],&a[j]);
}
}
}

void BubbleSort2(int a[],int n)
{
//冒泡算法的进一步优化,使用一个标志位来记录是
//否有数据的交换,如果数据有交换,则将标志flag赋值为true
int i,j;
for (i=0;i<n;i++){
for (j=n-2;j>=i;j--){
if (a[j]>a[j+1])
swap(&a[j],&a[j+1]);
}
}
}

void BubbleSort3(int a[],int n)
{
int i,j;
int flag=1;

for (i=0;i<n&&flag;i++){
flag=0;
for (j=n-2;j>=i;j--){
if (a[j]>a[j+1]){
swap(&a[j],&a[j+1]);
flag=1;
}
}
}
}

void Print(int a[],int n)
{
int i;
for (i=0;i<=n-1;i++){
printf("%d  ",a[i]);
}
printf("\n\n\n");
}

int main()
{
int a[10]={1,8,5,7,9,2,3,6,4,11};
BubbleSort3(a,10);
Print(a,10);
return 0;
}


上面的程序还不如这个版本:

void Bubble(int a[],int n)
{
int i,j;
for (i=0;i<=n-2;i++){
for (j=0;j<=n-2-i;j++){
if (a[j+1]<a[j]){
swap(a[j+1],a[j]);
}
}
}

for (i=0;i<=n-1;i++){
printf("%3d",a[i]);
}
printf("\n");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: