zoukankan      html  css  js  c++  java
  • 冒泡排序

    首先引入两个概念:

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

    假如序列中有$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	",i,data[i]);
            printf("
    ");
        }
     
        return 0;
    }
    
    

  • 相关阅读:
    Vue 单向数据流&双向数据绑定原理
    Arguments对象
    类数组对象(array-like objects)
    ...theArgs剩余参数
    vue 深度选择器/deep/报错(标红)
    修改mandMobile下拉菜单样式
    PC端input maxlength 失效问题
    el-input 正则限制输入为非负整数
    Mac鼠标左右键都是右键
    Vue双向数据绑定简易实现
  • 原文地址:https://www.cnblogs.com/hyxk/p/14753234.html
Copyright © 2011-2022 走看看