如果光是求“最大数”的话,根本用不着冒泡排序吧……
而喊此枣且这扒蠢个冒泡排序,居然是用指针的……
第一行:定义一个整数数组,然郑拆后让一个整形指针指向这个数组(的头部)
第二行:定义ij两个循环计量,temp是交换用的中间变量,size是数组长度
第三行:用a的内存长度,除以int型的内存长度,得到的是a的数组长度,但听说最好不要这么用
第四行往下:循环开始
具体方法就是,先让第0个元素,跟第1个元素比较,当前者大于后者时,交换两者的值
然后让第0个元素,跟第2个元素比较,同样规则交换,直到第0元素比第size-1元素
当第0个元素跟其它所有元素比较过后,第0元素即为当前数组里最小的
因为每次都让更小的元素归到第0的位置
然后再让第1个元素跟后续的那些元素比较,以此类推,每次都把小数往前移
最后比较到第size-2跟第size-1个元素完成后,这个数组就完成排列了
代码最后两行是按顺序输出数组的值,应该是从小到大排列的。
如果你题目只是取最大值的话,根本不用这么写。
冒泡排序的思想:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数码册毕放后。至此第一趟结束迟芹,将最大的数放到了最后。在第二趟:仍从第一对数开始姿皮比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
具体程序实现过程可以对照算法思想看
这是冒泡法,橘搭求任意长度数组的升序排列,sizeof(a)/sizeof(int)是求该数组元素个数。指针p指向数组a首元素,两个for循环是经典的返渣冒圆世拿泡排序算法,建议LZ自己用笔画下程序每步骤,就很容易理解冒泡排序了,都是这样学过来的,只看不容易明白的。
冒泡排序一般是:首先明确目的——把最大的元素冒到最尾巴上去,并且尽量少的交换次数。方法:选定从第一个元素并且把它赋给中间变量(另设一个如:t)-> 与下一个派核元素数比较 -> 若是比较大则把比较小的那个数存在第一个元素的位置;否则,把较大的那个数赋给t
-> 然后重复与下一个元素进行比较,继续调换,规则一样。 到尾巴结束。再从尾巴开始,把最小的元素往回冒到第一个。然后以第二个元素为开头继续上面的操作。。。。我想这可能是你不懂的地方吧。具体的,如何操作,在这些提示的基础上去看代蔽羡歼码。要学会阅宏冲读代码。有了思想,读代码就会有一个比较清晰的方向了
for(j=0;j
if(*(p+j)>*(p+j+1))
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
通过这告尘漏样的循环,if语句控制的就是只要前面的数(*(p+j))比后面的数(*(p+j+1))大,就交换位置,一遍循环下来,数组中最大的数自然到了a[size-1]的位置上了;袜烂然后外循环余下的最大数就到了a[size-1-1]的位置上兄锋了,因为与a[size-1]上的数比较时,它肯定小余第一次的最大数,所以不会发生交换;依此类推就实现了排序功能,这就是冒泡排序。