冒泡排序和简单选择排序的问题 运行错误
这个算法是有点麻烦 但是我想知道如果按这个算法来 要怎么修改?题目如下,附上代码题目:
下面是的函数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编辑过]