分类: C/C++
2012-03-31 22:06:59
源码:
/*数组排序*/
#include
//#define MAX(a,b) ((a) > (b) ? (a) : (b)
#if 1
int arrange(int sa[], int num)
{
int i,j,tmp;
int stimes = 0; //circle total times
int ttimes = 0; //really exchange times
if(num < 1)
{
printf("Array error\n");
}
for(i = num-1; i >= 0; i--)
{
for(j = 0; j < i; j++)
{
if(sa[j] > sa[j+1])
{
tmp = sa[j];
sa[j] = sa[j+1];
sa[j+1] = tmp;
ttimes++;
}
stimes++;
}
printf("tmp:%d\n",tmp);
}
printf("st:%d,tt:%d\n",stimes,ttimes);
return 0;
}
#endif
int main()
{
int sr[] = {1,8,2,9,-1};
int p,numb;
numb = sizeof(sr)/sizeof(sr[0]);
arrange(sr, numb);
for(p = 0; p < numb; p++)
printf("%d\t",sr[p]);
return 0;
}
编程小结:
冒泡法排序
2层for循环,每一次内层for循环都可以确定本轮的最大值,放在本轮最后;外层for循环主要用来确定排序的范围。(由于每一次内循环都确定一个最大值且位于最后,外层for循环只需要将最后的最大值去除排序范围即可)