/** * 冒泡排序:C 语言 * */ #include <stdio.h> // 数组长度 #define LENGTH(array) ( (sizeof(array)) / (sizeof(array[0])) ) // 交互数值 #define swap(a,b) (a^=b,b^=a,a^=b) /* * 冒泡排序 * * 参数说明: * a -- 待排序的数组 * n -- 数组的长度 */
//经典冒泡排序
void sort_bubble(int* a,int len)
{
int i, j;
int temp;
for (i = 0; i < len - 1; i++)
{
for (j = 0; j < len - 1 - i; j++)
{
if (a[j] > a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
//冒泡排序C实现二
//观察上面冒泡排序的流程图,第3趟排序之后,数据已经是有序的了;第4趟和第5趟并没有进行数据交换。
//下面我们对冒泡排序进行优化,使它效率更高一些:添加一个标记,如果一趟遍历中发生了交换,则标记为true,否则为false。如果某一趟没有发生交换,说明排序已经完成!
void sort_bubble_1(int* a, int len)
{
int i, j;
int temp;
int flag;
for (i = 0; i < len - 1; i++)
{
for (j = 0; j < len - 1 - i; j++)
{
flag = 0;
if (a[j] > a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
flag = 1;
}
}
if (!flag)
break;
}
}
void sort_bubble(int* a,int len)
{
int i, j;
int temp;
for (i = 0; i < len - 1; i++)
{
for (j = 0; j < len - 1 - i; j++)
{
if (a[j] > a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
//冒泡排序C实现二
//观察上面冒泡排序的流程图,第3趟排序之后,数据已经是有序的了;第4趟和第5趟并没有进行数据交换。
//下面我们对冒泡排序进行优化,使它效率更高一些:添加一个标记,如果一趟遍历中发生了交换,则标记为true,否则为false。如果某一趟没有发生交换,说明排序已经完成!
void sort_bubble_1(int* a, int len)
{
int i, j;
int temp;
int flag;
for (i = 0; i < len - 1; i++)
{
for (j = 0; j < len - 1 - i; j++)
{
flag = 0;
if (a[j] > a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
flag = 1;
}
}
if (!flag)
break;
}
}
void main() { int i; int a[] = {20,40,30,10,60,50}; int ilen = LENGTH(a); printf("before sort:"); for (i=0; i<ilen; i++) printf("%d ", a[i]); printf(" "); sort_bubble_1(a, ilen); //sort_bubble(a, ilen); printf("after sort:"); for (i=0; i<ilen; i++) printf("%d ", a[i]); printf(" "); }