前几天在看排序法时,把冒泡排序法和选择排序法给搞混了,最终搞了个四不像,冒泡不是冒泡,选择不是选择,后来整理了下,给他们俩牵了根红线,结构诞生了这个排序法,试了试,还行,比较好懂,于是抓紧来分享一下啦。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 10
//自改冒泡排序法
void zgmp(int*a,int len)
{int i,j,h,t;
int sum=0;
for(i=0;i<N-1;i++)//最后一步是倒数第二个就可以了;
//最后一步即是倒数第二个(a[i])和 最后一个(a[j])比较了
{for(j=i+1;j<N;j++)//从开始比较的后一个数开始比较
{
sum++; //累计排序步骤
if(a[i]>a[j])//确保了比较的第一个数永远是最小的
{
t=a[j];
a[j]=a[i];
a[i]=t;
}
}
printf("第%d步的结果为:\n",i);//输出每步的结果
for(h=0;h<N;h++)
printf("%d\t",a[h]);
}
// printf("\n");
printf("最终结果为:\n");
for(i=0;i<N;i++)
{
if(i%10==0)
printf("\n");//每行输出10个
printf("%d\t",a[i]);
}
printf("\n");
printf("总共需要%d步\n",sum);
}
int main()
{
int i;
int a[N];
//产生随机数组
srand(time(NULL));//产生不重复的随机数
for(i=0;i<N;i++)
{
a[i]=rand();
printf("%d\t",a[i]);
}
printf("\n");
zgmp(a,N);//函数调用
system("pause");
return 0;
}
(其实,记性不好也不是件坏事。如果遇到问题,忘记了解决方法,自己又想出了自己的办法,好了,问题解决了,往大里说技术革新差不多就是这样来的。)