冒泡算法 鸡尾酒算法 插入排序

HFSS学习笔记——Vivaldi天线仿真(一) Vivaldi 天线HFSS仿真,HFSS中指数曲线绘制及曲面绘制。 阅读详情

        #region 冒泡算法运作如下
        //比较相邻的元素。如果第一个比第二个大,就交换他们两个。
        //对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
        //针对所有的元素重复以上的步骤,除了最后一个。
        //持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
        /// <summary>
        /// 冒泡排序(bubble sort) — O(n2) 从小到大
        /// </summary>
        /// <param name="intArr"></param>
        /// <returns></returns>
        public static int[] BubbleSortAes(int[] intArr)
        {
            //第四次修改
            int index = 0;
            bool flag = false;
            int temp = 0;
            for (int i = 0; i < intArr.Length; i++)
            {
                //第二次修改 使用最新下标 而且不用每次比较成功都进行值交换
                //int index = i;
                //第三次修改 增加最新下标更改标识
                //bool flag = false;
                index = i;
                for (int j = i + 1; j < intArr.Length; j++)
                {
                    if (intArr[index] > intArr[j])//将最小值冒泡
                    {
                        index = j;
                        flag = true;
                        #region 第一此编写
                        //int temp = intArr[i];
                        //intArr[i] = intArr[j];
                        //intArr[j] = temp;
                        #endregion
                    }
                }
                //将小值赋到小的下标处
                if (flag)
                {
                    temp = intArr[index];
                    intArr[index] = intArr[i];
                    intArr[i] = temp;
                }
            }
            return intArr;
        }
        /// <summary>
        /// 冒泡排序(bubble sort) — O(n2) 从大到小
        /// </summary>
        /// <param name="intArr"></param>
        /// <returns></returns>
        public static int[] BubbleSortDesc(int[] intArr)
        {
            int index = 0;
            bool flag = false;
            int temp = 0;
            for (int i = 0; i < intArr.Length; i++)
            {
                index = i;
                for (int j = i + 1; j < intArr.Length; j++)
                {
                    if (intArr[index] < intArr[j])//将最大值冒泡
                    {
                        index = j;
                        flag = true;
                    }
                }
                //将大值赋到小的下标处
                if (flag)
                {
                    temp = intArr[index];
                    intArr[index] = intArr[i];
                    intArr[i] = temp;
                }
            }
            return intArr;
        }
        #endregion

        #region 鸡尾酒算法运作如下
        //鸡尾酒排序,也就是定向冒泡排序, 鸡尾酒搅拌排序, 搅拌排序 (也可以视作选择排序的一种变形), 涟漪排序, 来回排序 or 快乐小时排序, 是冒泡排序的一种变形。
        //此算法与冒泡排序的不同处在于排序时是以双向在序列中进行排序。
        //鸡尾酒排序等于是冒泡排序的轻微变形。不同的地方在于从低到高然后从高到低,而冒泡排序则仅从低到高去比较序列里的每个元素。
        //他可以得到比冒泡排序稍微好一点的效能,原因是冒泡排序只从一个方向进行比对(由低到高),每次循环只移动一个项目。
        /// <summary>
        /// 鸡尾酒排序 (Cocktail sort, 双向的冒泡排序) — O(n2) 从小到大
        /// </summary>
        /// <param name="intArr"></param>
        /// <returns></returns>
        public static int[] CocktailSortAes(int[] intArr)
        {
            int top = 0;
            int bottom=intArr.Length-1;
            bool flag=true;
            while (flag)
            {
                flag = false;
                for (int i = top; i < bottom; i = i + 1)//从上向下
                {
                    if (intArr[i] > intArr[i + 1])//如果下边大于上边 那么进行大值冒泡
                    {
                        int temp = intArr[i];
                        intArr[i] = intArr[i + 1];
                        intArr[i + 1] = temp;
                        flag = true;
                    }
                }
                bottom = bottom - 1;
                for (int j = bottom; j > top; j = j - 1)//从下向上
                {
                    if (intArr[j] < intArr[j - 1])//如果下边大于上边 那么进行大值冒泡
                    {
                        int temp = intArr[j];
                        intArr[j] = intArr[j - 1];
                        intArr[j - 1] = temp;
                        flag = true;
                    }
                }
                top = top + 1;
            }
            return intArr;
        }
        /// <summary>
        /// 鸡尾酒排序 (Cocktail sort, 双向的冒泡排序) — O(n2) 从大到小
        /// </summary>
        /// <param name="intArr"></param>
        /// <returns></returns>
        public static int[] CocktailSortDesc(int[] intArr)
        {
            int top = 0;
            int bottom = intArr.Length - 1;
            bool flag = true;
            int temp=0;
            while (flag)
            {
                flag = false;
                for (int i = top; i < bottom; i = i + 1)//从上向下
                {
                    if (intArr[i] < intArr[i + 1])//如果下边大于上边 那么进行大值冒泡
                    {
                        temp = intArr[i];
                        intArr[i] = intArr[i + 1];
                        intArr[i + 1] = temp;
                        flag = true;
                    }
                }
                bottom = bottom - 1;
                for (int j = bottom; j > top; j = j - 1)//从下向上
                {
                    if (intArr[j] > intArr[j - 1])//如果下边大于上边 那么进行大值冒泡
                    {
                        temp = intArr[j];
                        intArr[j] = intArr[j - 1];
                        intArr[j - 1] = temp;
                        flag = true;
                    }
                }
                top = top + 1;
            }
            return intArr;
        }
        #endregion

        #region 插入排序运作如下
        //1、从第一个元素开始,该元素可以认为已经被排序
        //2、取出下一个元素,在已经排序的元素序列中从后向前扫描
        //3、如果该元素(已排序)大于新元素,将该元素移到下一位置
        //4、重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
        //5、将新元素插入到该位置中
        //6、重复步骤2
        /// <summary>
        /// 插入排序 (insertion sort)— O(n2) 从小到大
        /// </summary>
        /// <param name="intArr"></param>
        /// <returns></returns>
        public static int[] InsertionSortAes(int[] intArr)
        {
            int i=0;
            int j=0;
            int temp;
            for (i = 1; i < intArr.Length; i++)
            {
                temp = intArr[i];
                for (j = i; j > 0 && temp < intArr[j - 1]; j--)
                {
                    intArr[j] = intArr[j - 1];
                }
                intArr[j] = temp;
            }
            return intArr;
        }
        /// <summary>
        /// 插入排序 (insertion sort)— O(n2) 从大到小
        /// </summary>
        /// <param name="intArr"></param>
        /// <returns></returns>
        public static int[] InsertionSortDesc(int[] intArr)
        {
            int i = 0;
            int j = 0;
            int temp;
            for (i = 1; i < intArr.Length; i++)
            {
                temp = intArr[i];
                for (j = i; j > 0 && temp > intArr[j - 1]; j--)
                {
                    intArr[j] = intArr[j - 1];
                }
                intArr[j] = temp;
            }
            return intArr;
        }
        #endregion
曲线最小二乘拟合基础 介绍曲线拟合的最小二乘原理,介绍了常规最小二乘和正交最小二乘算法,最后介绍了MathNet矩阵运算库的基本操作。 阅读详情

相关推荐

BCIC IV 2a数据集实战:从MATLAB导入到EEG信号分析全流程

本文提供了BCIC IV 2a数据集从MATLAB导入到EEG信号分析的完整实战流程。详细解析了数据集结构,区分了EEG与EOG信号,并演示了信号可视化、基础预处理(滤波、分段、基线校正)等关键步骤,帮助脑机接口研究者快速上手处理这一经典运动想象数据集。

weixin_29047919的博客 469

常用的排序算法有哪些?冒泡、选择、插入排序怎么写?鸡尾酒排序和希尔排序是什么?怎么写鸡尾酒排序和希尔排序? +o+ 用Python写算法

排序算法冒泡排序选择排序插入排序希尔排序 冒泡排序 选择排序 插入排序 希尔排序

寻觅的博客 388

四旋翼黑科技揭秘:如何利用PX4隐藏的角加速度数据提升控制性能

本文深入探讨了如何利用PX4飞控中隐藏的角加速度数据,结合增量非线性动态逆(INDI)控制方法,显著提升四旋翼无人机的控制性能。通过实战教程,指导开发者从数据订阅、INDI原理到代码实现,构建响应更快、鲁棒性更强的控制回路,有效应对突风与快速机动。

lake5的博客 720

三种基础排序算法(选择排序、插入排序、冒泡排序)

注:  图片转自点击打开链接  以下均使用升序介绍。 选择排序: 从数组中找到最小的元素,和第一个位置的元素互换。   从第二个位置开始,找到最小的元素,和第二个位置的元素互换。  ........  直到选出array.length-1个较小元素,剩下的最大的元素自动排在最后一位。 代码实现:

weixin_38830382的博客 3万+

技能伤害继承英雄属性【War3地图编辑器】

风暴之锤跟随山丘之王的力量增长

ArYe 2303

【mip-NeRF】使用一组二维图像渲染3D场景视频(mip-NeRF论文复现)

本文对mip-NeRF模型的pytorch实现进行了复现

Ryan2k的博客 1844

6种排序算法:冒泡、鸡尾酒、选择、插入、归并、快速

#include using namespace std; void BubbleSort(int* pData,int Count)//冒泡排序 { int iTemp,i,j; for (i = 1;i < Count;i++) { for (j = Count - 1;j >= i;j--) { if (pData[j] < pData[j-1])

2221

技术前沿:半导体前道检测和量测设备修复技术

半导体前道检测设备是目前除光刻机外,国产渗透率较低的环节之一,近年来我国初步实现国产突破。前道检测相对后道检测环节壁垒更高,国内多家涉及后道测试,涉及前道检测和中道检测相对较少。

VOMMA的博客 4543

插入排序监视哨和鸡尾酒排序

插入排序监视哨和鸡尾酒排序 插入排序(带监视哨): 思路:设置a[0]元素为监视哨,a[1]~a[N]存放数据 a[1]为第一个元素,根据插入排序的思想,默认a[1[有序,从i = 2开始向前进行插入,如: 数组: |a[]| 0 | 1 | 2 | 3 | 4 | 5 | |num| 0 | 5 | 4 | 3 | 1 | 8 | (注:a[0]初始化为0) 注:如果不用监视哨,进行普通插入排序,则不用空出a[0],其中原来a[0]的作用可用一个普通的int型

qq_51340322的博客 389

SolidWorks+ADAMS双验证:你的机械臂力矩计算真的靠谱吗?

本文探讨了机械臂力矩计算中手工计算的局限性,并介绍了SolidWorks和ADAMS双验证方法的重要性。通过实际案例展示了动态工况下传统计算方法的误差,详细解析了SolidWorks精准质心捕捉和ADAMS动力学仿真的关键技术,帮助工程师构建计算-仿真-实测闭环验证流程,确保机械臂设计的可靠性和安全性。

grafana6viz的博客 228

9.23华为OD机试真题 新系统 - 世界杯徽章换购 (Java/Py/C/C++/Js/Go)

9.23华为OD机试真题 新系统 - 世界杯徽章换购 (Java/Py/C/C++/Js/Go)

算法大师! 1601

php二分法 冒泡 快速排序,冒泡排序,鸡尾酒排序,选择排序,插入排序,二分法插入排序,快速排序...

int[] attr = {5,6,2,7,4,13,3,20,14,15,10,11,6,9,8,16};冒泡排序大的下沉,小的上浮。每次循环都从头(0)开始比较到(attr.length-循环次数)位置,每次比较相邻两个元素,前一个元素大于后一个元素,则两个元素交换值。public void bubblingSort(int[] attr) {for (int i = attr.length ...

weixin_34698515的博客 200

Deepseek Engram 论文全面解读

以下是对 DeepSeek 与北京大学于联合发布的论文《》(简称Engram 论文)的。

lpfasd123的博客 355

C语言之各种排序法及核心思想(冒泡、鸡尾酒、选择、插入、二分法、希尔、堆、归并、快速)

#include void swap(int num[],int a, int b) { int tmp; tmp = num[a]; num[a] = num[b]; num[b] = tmp; } void printfA(int *num,int len) { int i; for(i = 0;i < len; i++) { printf("%4d",num[i

ZH0314的博客 1530

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

排序算法学习(一):冒泡排序

所谓排序即按照一定的规律将一组数据进行排列。排序算法的形式化定义如下: 设存在一组无序序列,并且存在一个函数,在经过一系列对该序列中的元素位置调整后,使得新得到的序列满足对于任意的,均有(升序排序)或者(降序排序)。针对不同的数据源的不同特性,人们设计出了不同的排序算法,以求对算法的时间复杂度或者空间复杂度进行优化。常见的排序算法有:冒泡排序,插入排序,快速排序,桶排序算法等。下面对各种...

蜗牛大人的专栏 579

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

数据结构各种排序法及核心思想(冒泡、鸡尾酒、选择、插入、二分法、希尔、堆、归并、快速)

#include #define N 10 void swap(int a[],int i,int j) { int tmp = a[i]; a[i] = a[j]; a[j] = tmp; } void printA(int *a,int len) { int i; for (i = 0; i < len; i++) { printf ("%4d",a[i]);

qq_39482521的博客 582

JAVA 三种排序算法 (选择排序、插入排序、冒泡排序)形象图解,一看就会。

注: 以下均使用升序介绍。 选择排序: 从数组中找到最小的元素,和第一个位置的元素互换。 从第二个位置开始,找到最小的元素,和第二个位置的元素互换。 … 直到选出array.length-1个较小元素,剩下的最大的元素自动排在最后一位。 在这里插入图片描述 代码实现: public class Selection { public static void sort(int[] arr){ ...

Mtart liu的博客 604

c语言的5种常用排序方法

c语言的5种常用排序算法 1、冒泡排序(最常用) 冒泡排序是最简单的排序方法:原理是:从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。(注意每一轮都是从a[0]开始比较的) 以从小到大排序为例,第一轮比较后,所有数中最大的那个数就会浮到最右边;第二轮比较后,所有数中第二大的那个数就会浮到倒数第二个位置……就这样一轮一轮地比较,最后实...

sanguine_boy的博客 3万+

python 排序冒泡排序与双向冒泡排序

冒泡排序:  冒泡排序就是每次找出最大(最小)元素,放在集合最前或最后,这是最简单的排序算法 def bubble_sort(collection): #升序排列 length=len(collection) for s in range(length-1):#可以假设只有一个元素的情况,这样可以直接返回 flage=True#应该...

weixin_30825199的博客 1225

九种排序,冒泡,插入,折半插入,希尔,选择,鸡尾酒,堆,快速,计数

#include<stdio.h> #include<stdlib.h> #include<stdbool.h> #include<time.h> void swap(int* arr,int* buf) { int temp = *arr; *arr = *buf; *buf = temp; } void show(int* arr,int len) { int i=0; for(i=0;i<10;i++) { printf("%d “,arr[i])

qq_44126789的博客 267

js【生成规定数量不重复随机数】、【冒泡排序】、【鸡尾酒排序】、【选择排序】、【插入排序】、【未完工的二分插入排序】------【总结】...

【生成规定数量不重复随机数】 function creatRandom( num ){ var randomLen = num, ranArr = [], thisRan = null, whileOff = false, cnt = 0; //初始化push进去1个 ...

182

Go 冒泡、鸡尾酒、快速、插入 排序

Go 冒泡、鸡尾酒、快速、插入 排序 package main import "fmt" var sli = []int{1, 43, 54, 62, 21, 66, 32, 78, 36, 76, 39} //冒泡排序 func bubbleSort(sli []int) []int { len := len(sli) //该层循环控制 需要冒泡的轮数 for i := 0; i &...

weixin_44707778的博客 213

几种简单排序算法(冒泡,插入排序)的python实现

一,冒泡排序: 1,平均时间复杂度:O(n^2) 属于稳定算法 2,算法过程:重复地走访过要排序的元素,一次比较相邻两个元素,如果他们的顺序错误就把他们调换过来,直到没有元素再需要交换,排序完成。 a = [1,2,6,4,1,2,3,49,7] for i in range(len(a)-1,0,-1): #8-0 for j in range(i): #7-0 ...

qq_38775473的博客 199

简单排序算法 冒泡、插入、选择

** 简单排序算法 ** 1.冒泡排序 数据两两比较,每次冒出一个最大(小)值,需要n+n-1+…+1次比较,时间复杂度o(n^2) 基本代码 void sort(int[] arr){ for(int i = 0;i&amp;amp;lt;arr.length-1;i++){ for(int j = 0;j&amp;amp;lt;arr.length-1-i;j++){ if(arr[j]&amp;amp;gt;...

qq_43360780的博客 228

冒泡、鸡尾酒、选择、插入、归并、快速排序的C++程序

#include using namespace std; void BubbleSort(int* pData,int Count)//冒泡排序 { int iTemp,i,j; for (i = 1;i { for (j = Count - 1;j >= i;j--) { if (pData[j] { iTemp = pData[j-1]; pData[j-1]=

raywang5288的博客 396

JAVA中基本的四种排序(冒泡排序,选择排序,插入排序,快速排序)

冒泡排序 /** * 从前往后,依次比较相邻的两个数,把较大的数放到后面。一次循环,可以在当前最末尾位置得到一个当前最大值。 */ public class orderBy1 { public static void main(String[] args) { int score[] = {67, 69, 75, 88}; for(i...

qq_42844643的博客 410

常见排序算法总结

通常所说的排序算法往往指的是内部排序算法,即数据记录在内存中进行排序。 排序算法大体可分为两种: 一种是比较排序,时间复杂度O(nlogn) ~ O(n^2),主要有:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等。 另一种是非比较排序,时间复杂度可以达到O(n),主要有:计数排序,基数排序,桶排序等。 算法性能如下图: 算法稳定性: 排序算法稳定性的简单形式化定义为:如果Ai = ...

TJH000的博客 539
上一篇: 检查线程池任务执行完后写入日志
下一篇: 对称加密
andycode
博客等级 码龄17年 12粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值