一个简单的冒泡排序
一、思路
思路;从左往右边两两比较,边交换
1.i层循环负责趟数,(i = 1; i < count; i++)(flag = 0)
2.j层循环负责交换次数,(i = 0; j < count- i; j++)
3.flag负责标记进未进j层循环,flag = 1表明进入,减少不必要的交换。
4.比较j的值和j + 1的值,交换j和j + 1的值(中间值交换)。
二、实现
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define ERR(x,y,z) if(x) \
{ \
printf(y);\
return z;\
}
#define SIZE 8
void bubble_sort(int *buf, int size);
void show_buf(int *buf, int size);
int main(int argc,char *argv[])
{
int buf[SIZE] = {1,3,9,46,45,67,1,9};
bubble_sort(buf,SIZE);
show_buf(buf,SIZE);
return 0;
}
void bubble_sort(int *buf, int size)
{
ERR(NULL == buf,"buf false\n",);
int i,j;
int flag = 0;
int temp = 0;
for(i = 1; i < size; i++)
{
flag = 0;
for(j = 0; j < size - 1; j++)
{
if(*(buf + j) > *(buf + j + 1))
{
temp = *(buf + j);
*(buf + j) = *(buf + j + 1);
*(buf + j + 1) = temp;
flag = 1;
}
}
if(!flag)
break;
}
}
void show_buf(int *buf,int size)
{
ERR(NULL == buf,"buf false\n",);
int i = 0;
for(i = 0; i < size; i++)
printf("%d\t",*(buf + i));
printf("\n");
}