[每日练习]三种冒泡排序方法

来源:互联网 发布:python webui 编辑:程序博客网 时间:2024/06/06 18:55

#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;
    }
}

0 0
原创粉丝点击