首页 > 其他分享 >排序1-冒泡排序

排序1-冒泡排序

时间:2024-04-21 21:34:39浏览次数:13  
标签:arr int len ++ 冒泡排序 排序

排序1-冒泡排序


冒泡排序的次数是递减的, 第一次确定了最大元素的位置, 所以第二次只需要进行n-1次排列, 第二次确定了第二大元素的位置, 所以第三次只需要进行n-2次排列, 以此类推

for (int i = 0; i < len; i++){
        //每次遍历的次数是递减的
        //所以j=len-1-i
        for (int j = 0; j < len-1-i; j++){
            if(arr[j]>arr[j+1])
                Swap(&arr[j], &arr[j+1]);
        }

交换元素位置

//交换
void Swap(int *a, int *b){
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

冒泡排序

//冒泡排序
void BubbleSort(int arr[]){
    int len = MAX;
    for (int i = 0; i < len; i++){
        for (int j = 0; j < len-1-i; j++){
            if(arr[j]>arr[j+1])
                Swap(&arr[j], &arr[j+1]);
        }
    }
}

打印

//打印数组
void PrintArray(int arr[]){
    int len = MAX;
    for (int i = 0; i < len; i++){
        cout << arr[i] << " ";
    }
    cout << endl;    
}

测试

int main(){
    int arr[MAX];
    srand((unsigned int)time(NULL));
    for (int i = 0; i < MAX; i++){
        arr[i] = rand() % MAX;
    }

    cout << "排序前: ";
    PrintArray(arr);

    BubbleSort(arr);

    cout << "排序后: ";
    PrintArray(arr);

    system("pause");
    return 0;
}


优化

在一次排序中如果没有元素交换, 说明每一个元素都比它前一个元素大(正序), 此时排序已经完成, 可以提前终止排序.

int flag = 0; //0表示false, 标志没有排序好
//冒泡排序
void BubbleSort(int arr[]){
    int len = MAX;
    for (int i = 0; i<len && flag==0; i++){
        flag = 1; //认为已经排序好了
        for (int j = 0; j < len-1-i; j++){ 
            if(arr[j]>arr[j+1]){//有元素比它前一个元素小时触发
                flag = 0; //将排序标志更新为没有排序好
                Swap(&arr[j], &arr[j+1]);
            }
        }
    }
}

标签:arr,int,len,++,冒泡排序,排序
From: https://www.cnblogs.com/HIK4RU44/p/18149534

相关文章

  • 归并排序
    归并排序左部分有序 ---> 右部分有序 --->整体有序查看代码//https://leetcode.cn/problems/sort-an-array/importjava.util.Arrays;classSolution{publicstaticfinalintMAX_N=100001;publicstaticint[]help=newint[MAX_N];publi......
  • 说说常见的排序算法有哪些?区别?
    一、是什么排序是程序开发中非常常见的操作,对一组任意的数据元素经过排序操作后,就可以把他们变成一组一定规则排序的有序序列排序算法属于算法中的一种,而且是覆盖范围极小的一种,彻底掌握排序算法对程序开发是有很大的帮助的对与排序算法的好坏衡量,主要是从时间复杂度、空间复......
  • 希尔排序
    #include<iostream>#include<cmath>usingnamespacestd;intmain(){intn;cin>>n;inta[n+5];for(inti=0;i<n;i++){cin>>a[i];}for(doublei=n;i>1;){i=round(i/2);for(i......
  • 希尔排序
    #include<bits/stdc++.h>usingnamespacestd;intmain(){ stringa="liuyixing"; for(doublei=9;i>1;){ i=round(i/2); for(intj=0;j+i<9;j++){ if(a[j]>a[j+(int)i]){ swap(a[j],a[j+(int)i]); } } } for(inti=0;i<......
  • JZ33 二叉排序树的后序遍历序列
    classSolution{public://判断该数组是不是某二叉搜索树的后序遍历的结果。//如果是则返回true,否则返回false//注意传入参数是一个int类型的vector容器boolVerifySquenceOfBST(vector<int>sequence){if(sequence.empty()) //二叉树......
  • el-table实现自定义排序事件
    说明在项目开发中,需求有时会需要通过调取接口去实现表格数据排序。实现要点在el-table-column中定义sortable="custom"属性在el-table中定义@sort-change="自定义排序事件"代码...<el-table:data="list"@sort-change="handleSort"ref="tableRef">......
  • LinkedHashMap排序
    importjava.util.LinkedHashMap;importjava.util.Map;importjava.util.TreeMap; publicclassSortLinkedHashMapByKey{publicstaticvoidmain(String[]args){//创建一个LinkedHashMapLinkedHashMap<Integer,String>linkedHashMap=newLinkedHashMap<......
  • JZ36二叉树排序树与双向链表
    /*structTreeNode{ intval; structTreeNode*left; structTreeNode*right; TreeNode(intx): val(x),left(NULL),right(NULL){ }};*/#include<cstddef>classSolution{public: TreeNode*ans=nullptr; //最终的链表 TreeNode*pre=nullptr; ......
  • 排序
    排序算法直接插入折半插入冒泡排序简单选择排序快速排序堆排序实现以及使用c++#include<iostream>#include<algorithm>#include<queue>usingnamespacestd;voidhalf_insert_sort(intnums[],intsize){ //将新数字插入到有序数组中 //使用折半查找寻找插入......
  • 06-排序 分页 过滤
    排序查询多条和全部才会用到排序排序关键字:ordering查询字符串查询字符串(QueryString)是指在URL中以问号(?)开始的部分,用于向服务器传递参数。它由一个或多个键值对组成,每个键值对之间用&符号分隔。例如,在以下URL中,查询字符串是?page=2&category=books:在django种如......