皓月星空

导航

冒泡排序

首先引入两个概念:

顺序:如果两个数据的位置符合排序的需要,则称它们是顺序的。
逆序:如果两个数据的位置不符合排序需要,则称它们是逆序的。
冒泡排序基于这样一种简单的思路:从头到尾让每两个相邻的元素进行比较,顺序就保持位置不变,逆序就交换位置。可以预料,经过一轮比较,序列中具有“极值”的数据,将被挪>>至序列的末端。

假如序列中有$n$个数据,那么在最极端的情况下,只需要经过$n-1$轮的比较,则一定可以将所有的数据排序完毕。冒泡法排序的时间复杂度是$O(n^2)$

#include <stdio.h>
#include <stdbool.h>
//#define 10 10

void swap(int *a ,int *b)
{
    int tmp ;
    tmp = *a;
    *a = *b;
    *b = tmp;
}
/*
void bubbleinsert(int data[], int len)
{
    //
    int j = 0;
    while(1)
    {
        int i;
        for(i = 0;i<len-1-j;i++)
        {   
            if(data[i] < data[i+1]);
            {
                continue;
            }
            
        }
        swap(&data[i],&data[i+1]);   
        j++;
    }
}
*/
void bubbleinsert(int data[], int len)
{

    int i,j;
    for(j = 0;j<len-1;j++)
        for(i = 0; i < len-1-j ; i++)
        {
            if(data[i] > data[1+i])
            {

                swap(&data[i],&data[i+1]);
            }
        }
}
/*void bubbleinsert(int data[],  int len)
{
    int k=0;
    while(1)
    {
        bool done = true;//用来表示如果随机数已经是有序数直接跳出while

        int i;
        for(i=0; i<len-1-k; i++)
        {
            //comp_count++;

            if(data[i] <= data[i+1])
            {
                continue;
            }
        
            swap(&data[i], &data[i+1]);
            done = false;
        }

        if(done)
            break;
        k++;
    }
}*/
int main(int argc, char const *argv[])
{
    //产生随机数
    srand (time(NULL));
    int i;
    int data[10];
    //将产生的随机数放入数组中
    for (i = 0; i < 10; i++)
    {
        data[i] = rand()%100;//产生随机数为两位数
    }
    //进行冒泡排序
    bubbleinsert(data, 10);
    for (i = 0; i < 10; i++)
    {
        printf("%d排序为:%d\t",i,data[i]);
        printf("\n");
    }
 
    return 0;
}

posted on 2021-05-10 22:31  皓月星空  阅读(65)  评论(0编辑  收藏  举报