标签:
void BubbleSort(int *arr, int len)
{
assert(arr);
int i = 0;
int j = 0;
int tmp = 0;
for (i = 0; i < len - 1; i++)
{
for (j = 0; j < len -i- 1; j++) //每排序一趟,则必然后面有一个已经有序,可以减少循环缩小排序的范围
{
if (arr[j]>arr[j + 1])
{
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}void BubbleSort(int *arr, int len)
{
assert(arr);
int i = 0;
int j = 0;
int flag = 0;
int tmp = 0;
for (i = 0; i < len - 1; i++)
{
flag = 1; //flag初始时为1
for (j = 0; j < len - i - 1; j++) //每排序一趟,则必然后面有一个已经有序,可以缩小排序的范围
{
if (arr[j]>arr[j + 1]) //只要要交换数据,则flag就会被修改
{
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
flag = 0; //只要这组数还未完全有序,则一定会修改flag为0
}
}
if (flag) //如果排序一趟,发现已经有序,则不进入if,flag没被修改
{
break;
}
}
}
void BubbleSort(int *arr, int len)
{
assert(arr);
int i = 0;
int j = 0;
int flag = 0;
int tmp = 0;
int m = 0; //用来记录最后一次交换的位置
int k = len-1;
for (i = 0; i < len - 1; i++)
{
m = 0;
flag = 1;
for (j = 0; j < k; j++) //无序区的范围只从第一个元素,到上一趟最后一次交换的位置k
{
if (arr[j]>arr[j + 1])
{
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
flag = 0; //只要这组数还未完全有序,则一定会修改flag为0
m = j;
}
}
if (flag) //如果排序一趟,发现已经有序,则不进入if,flag没被修改
{
break;
}
k = m; //将k置成最后一次交换的位置
}
}
void BubbleSort(int *arr, int len)
{
assert(arr);
int i = 0;
int j = 0;
int flag = 0;
int m = 0; //记录最后一次交换的位置
int n = 0;
int k = len - 1;
for (i = 0; i < len - 1; i++)
{
m = 0;
flag = 1;
//正序扫描找最大值
for (j = n; j < k; j++) //无序区的范围只从第一个元素,到上一趟最后一次交换的位置k
{
if (arr[j]>arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
flag = 0; //只要这组数还未完全有序,则一定会修改flag为0
m = j;
}
}
k = m;
if (flag) //如果排序一趟,发现已经有序,则不进入if,flag没被修改
{
break;
}
//反序扫描找最小值
for (j = k; j>n; j--) //无序区的范围只从第一个元素,到上一趟最后一次交换的位置k
{
if (arr[j]<arr[j - 1])
{
int tmp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = tmp;
flag = 0; //只要这组数还未完全有序,则一定会修改flag为0
}
}
n++;
if (flag) //如果排序一趟,发现已经有序,则不进入if,flag没被修改
{
break;
} //将k置成最后一次交换的位置
}
}标签:
原文地址:http://blog.csdn.net/lf_2016/article/details/51557615