1、编写4种冒泡排序函数,使用数组作参数:
分别将最大值最小值推向头部或尾部。
(在main函数或全局区定义一个数组,作为实际参数调用4种排序函数进行测试)
注意:数组在做参数时,在被调函数中不能通过sizeof或者_countof来测量元素个数;
因此,每个排序函数中要将数组的元素个数通过参数传递到被调函数;
例如:
void sort1(int p[],int nLen)
{//把最大值推到尾部
void sort2(int p[],int nLen)
{//把最小值推到尾部
void sort3(int p[],int nLen)
{//把最大值推到头部
void sort4(int p[],int nLen)
{//把最小值推到头部
#include<stdio.h>
#include <stdlib.h>
void Print(int *p,int nLen)
{
int i = -1;
while (++i < nLen)//sizeof(a)/sizeof(a[0])
printf("%d ", *(p+i));//p[i] i*4
putchar(10);
//puts("");
}
void Sort1(int* p, int nLen)
{
int j = 0;
while (++j < nLen)//1..9
{
int i = -1;
while (++i < nLen - j)//0..8
{//9对比较
if (p[i] > p[i + 1])
{
int t = p[i];
p[i] = p[i + 1];
p[i + 1] = t;
}
}
//printf("第 %d 次循环 执行 %d 次\n", j, i);
}
Print(p,nLen);
}
void Sort2(int *p, int nLen)
{
int j = 0;
while (++j < nLen)//1..9
{
int i = -1;
while (++i < nLen - j)//0..8
{//9对比较
if (p[i] < p[i + 1])
{
int t = p[i];
p[i] = p[i + 1];
p[i + 1] = t;
}
}
//printf("第 %d 次循环 执行 %d 次\n", j, i);
}
Print(p, nLen);
}
void Sort3(int *p, int nLen)
{//+ * ^
int i = 0;
while (++i < nLen)//1..9
{
int j = nLen;
while (--j >= i)//9..1
{
if (p[j - 1] > p[j])
{
p[j] = p[j]+p[j-1]; //9 + 11 = 20
p[j - 1] = p[j] - p[j - 1];
p[j] = p[j] - p[j - 1];
}
}
}
Print(p, nLen);
}
void Sort4(int *p, int nLen)
{
int i = 0;
while (++i < nLen)//1..9
{
int j = nLen;
while (--j >= i)//9..1
{
if (p[j - 1] < p[j])
{
p[j] = p[j] + p[j - 1]; //9 + 11 = 20
p[j - 1] = p[j] - p[j - 1];
p[j] = p[j] - p[j - 1];
}
}
}
Print(p, nLen);
}
int main()
{
int a[] = { 33,6,5,4,42,21,11,40,31,8 };
Print(a, _countof(a));
Sort1(a, _countof(a));
Sort2(a, _countof(a));
Sort3(a, _countof(a));
Sort4(a, _countof(a));
return 0;
}