| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1569 人关注过本帖
标题:冒泡排序和简单选择排序的问题 运行错误
只看楼主 加入收藏
叶子1030
Rank: 2
来 自:西安
等 级:论坛游民
帖 子:12
专家分:14
注 册:2016-4-19
结帖率:40%
收藏
已结贴  问题点数:20 回复次数:1 
冒泡排序和简单选择排序的问题 运行错误
这个算法是有点麻烦 但是我想知道如果按这个算法来 要怎么修改?题目如下,附上代码

题目:
下面是的函数BubbleSort实现冒泡排序法,SelectSort实现简单选择排序法,用随机函数产生1000个整数(或浮点数),请分别采用这两种方法对该组整数(或浮点数)进行排序,按照从小到大的顺序输出这些数据,并输出在排序过程中这些数据间的比较次数。
void BubbleSort(int a[], int n)
{
 int i,j,swaptag=1;
 int temp;
for(i = 0; swaptag && i<n-1; i++)
{   
swaptag = 0;
     for(j = 0; j<n-i-1; j++)
           if (a[j] > a[j+1])
           {  
 swaptag = 1;
             temp = a[j];     
             a[j] = a[j+1];      
             a[j+1] = temp;
        }
}
}   

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


我的代码:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int* BubbleSort(int*a, int n)
{
 int i,j,swaptag=1;
 int temp;
 int times=0;
for(i = 0; swaptag && i<n-1; i++)
{   
swaptag = 0;
     for(j = 0; j<n-i-1; j++,times++)
           if (*(a+j) > *(a+j+1))
           {  
 swaptag = 1;
             temp =*(a+j) ;     
             *(a+j) = *(a+j+1);      
             *(a+j+1) = temp;
        }
}

printf("冒泡排序比较了%d次。\n",(n+2)*(n-1)/2);

return a;
}


int* SelectSort(int *a, int n)
{
int i,j,t;
int temp,times;
for(i = 0; i<n-1; i++)
{   
t = i;
 for(j = i+1;j<n; j++,times++)
           if (*(a+j) < *(a+t))    {  t = j;  }
    if (t!=i)
 {
temp = *(a+i);     
        *(a+i) = *(a+t);      
        *(a+t) = temp;
     }
}
printf("选择排序比较了%d次。\n",n*(n-1)/2);
return a;
}



int main()
{
    int a[1000],*aBubble,*aSelect,i=0;
    srand(time(NULL));
   
    for(;i<1000;i++)
    {
        a[i]=(int)rand();
        }
        
    printf("------------------------------------------\n");
    aBubble=BubbleSort(a,1000);
    printf("冒泡排序的结果如下:\n");
    for(i=0;i<1000;i++)
    {
        printf("%d\n",*(aBubble+i));
        }
        
    for(i=0;i<1000;i++)
    {
        a[i]=(int)rand();
        }
        
    printf("-------------------------------------------\n");
    aSelect=SelectSort(a,1000);   
    printf("选择排序的结果如下:\n");
    for(i=0;i<1000;i++)
    {
        printf("%d\n",*(aSelect+i));
        }

   
   
    system("pause");
    return 0;
}












[此贴子已经被作者于2016-5-16 17:45编辑过]

2016-05-16 17:44
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:20 
把times去掉就行了

程序代码:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int* BubbleSort(int*a, int n)
{
    int i, j, swaptag = 1;
    int temp;
    int times = 0;
    for (i = 0; swaptag && i<n - 1; i++)
    {
        swaptag = 0;
        for (j = 0; j<n - i - 1; j++, times++)
            if (*(a + j) > *(a + j + 1))
            {
                swaptag = 1;
                temp = *(a + j);
                *(a + j) = *(a + j + 1);
                *(a + j + 1) = temp;
            }
    }

    printf("冒泡排序比较了%d次。\n", (n + 2)*(n - 1) / 2);

    return a;
}


int* SelectSort(int *a, int n)
{
    int i, j, t;
    int temp;
    for (i = 0; i<n - 1; i++)
    {
        t = i;
        for (j = i + 1; j<n; j++)
            if (*(a + j) < *(a + t)) { t = j; }
        if (t != i)
        {
            temp = *(a + i);
            *(a + i) = *(a + t);
            *(a + t) = temp;
        }
    }
    printf("选择排序比较了%d次。\n", n*(n - 1) / 2);
    return a;
}



int main()
{
    int a[1000], *aBubble, *aSelect, i = 0;
    srand(time(NULL));

    for (; i<1000; i++)
    {
        a[i] = (int)rand();
    }

    printf("------------------------------------------\n");
    aBubble = BubbleSort(a, 1000);
    printf("冒泡排序的结果如下:\n");
    for (i = 0; i<1000; i++)
    {
        printf("%d\n", *(aBubble + i));
    }

    for (i = 0; i<1000; i++)
    {
        a[i] = (int)rand();
    }

    printf("-------------------------------------------\n");
    aSelect = SelectSort(a, 1000);
    printf("选择排序的结果如下:\n");
    for (i = 0; i<1000; i++)
    {
        printf("%d\n", *(aSelect + i));
    }



    system("pause");
    return 0;
}

2016-05-17 09:28
快速回复:冒泡排序和简单选择排序的问题 运行错误
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030171 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved