#include <stdio.h>
#include <stdlib.h>
#include "../util/util.h"
/*
设数组长度为N。
1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。
2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。
3.N=N-1,如果N不为0就重复前面二步,否则排序完成。
*/
void BubbleSort1(int *a, int begin, int end)
{
int *p = a + begin;
int i, j;
int len = end - begin;
for(i=0; i<(len-1); i++)
for(j=1; j<(len-i); j++)
if(p[j-1] > p[j])
{
SwapArray(p, j-1, j);
}
}
/*
设置一个标志,如果这一趟发生了交换,则为true,否则为false。明显如果有一趟没有发生交换,说明排序已经完成。
*/
void BubbleSort2(int *a, int begin, int end)
{
int *p = a + begin;
int i, j;
int len = end - begin;
int flag = 1;
for(i=0; i<(len-1) && flag; i++)
{
flag = 0;
for(j=1; j<(len-i); j++)
if(p[j-1] > p[j])
{
SwapArray(p, j-1, j);
flag = 1;
}
}
}
void BubbleSort3(int *a, int begin, int end)
{
int *p = a + begin;
int j;
int switch_point;
int switch_len = end - begin;
while(switch_len > 0)
{
switch_point = 0;
for(j=1; j<switch_len; j++)
if(p[j-1] > p[j])
{
SwapArray(p, j-1, j);
switch_point = j;
}
switch_len = switch_point;
}
}
[每日练习]三种冒泡排序方法
最新推荐文章于 2022-08-03 14:50:40 发布