简单排序算法

相衬成像介绍 阅读详情

冒泡排序

两个for循环,两两进行比较,如果满足规则,则将两个数据进行交换

    public int[] maopao() {
        int[] arrays = {1, 3, 9, 5, 11, 66, 85, 97, 101, 588, 469, 258, 147, 369, 456};

        for (int i = arrays.length - 1; i > 0; i--) {
            for (int j = 0; j < i; j++) {
                if (arrays[j] > arrays[j + 1]) {
                    int temp = arrays[j];
                    arrays[j] = arrays[j + 1];
                    arrays[j + 1] = temp;
                }
            }
        }
        return arrays;
    }

优化1

    public int[] maopao1() {
        int[] arrays = {1, 3, 9, 5, 11, 66, 85, 97, 101, 588, 469, 258, 147, 369, 456};

        for (int i = arrays.length - 1; i > 0; i--) {

            //是否发生了交换
            boolean isExchanged = false;
            for (int j = 0; j < i; j++) {
                if (arrays[j] > arrays[j + 1]) {
                    int temp = arrays[j];
                    arrays[j] = arrays[j + 1];
                    arrays[j + 1] = temp;
                    //发生了交换
                    isExchanged = true;
                }
            }

            //如果没有发生交换 表示已经是有序状态 没有必要继续遍历了
            if (!isExchanged) {
                break;
            }
        }

        return arrays;
    }

优化二

    public int[] maopao2() {
        int[] arrays = {1, 3, 56, 32, 33, 5, 6, 60, 61, 62, 63, 64};

        for (int i = arrays.length - 1; i > 0; i--) {

            //记录最后一次发生交换的坐标位置,该坐标之后的数据没有发生交换,代表是有序状态
            int changeIndex = 0;
            for (int j = 0; j < i; j++) {
                if (arrays[j] > arrays[j + 1]) {
                    int temp = arrays[j];
                    arrays[j] = arrays[j + 1];
                    arrays[j + 1] = temp;
                    //最后一次发生交换的坐标
                    changeIndex = j + 1;
                }
            }

            //下次可以从发生交换坐标的位置开始循环
            i = changeIndex;
        }

        return arrays;
    }

选择排序

不断的从数组中找出最大值,然后放入末尾

    public int[] xuanze() {
        int[] arrays = {1, 3, 9, 5, 11, 66, 85, 97, 101, 588, 469, 258, 147, 369, 456};

        for (int i = arrays.length - 1; i > 0; i--) {
            
            //记录下标
            int maxIndex = 0;
            for (int j = 0; j < i; j++) {
                if (arrays[maxIndex] < arrays[j + 1]) {
                    //记录较大值的下标,循环进行比对,找到最大值下标
                    maxIndex = j + 1;
                }
            }

            //将最大值与队尾进行交换 然后进行下一次遍历
            int temp = arrays[maxIndex];
            arrays[maxIndex] = arrays[i];
            arrays[i] = temp;

        }

        return arrays;
    }

插入排序

从数组中获取数字,并和已有的数据进行对比,选择自己插入的位置

    public int[] charu() {
        int[] arrays = {1, 3, 9, 5, 11, 66, 85, 97, 101, 588, 469, 258, 147, 369, 456};


        int current = 0;
        for (int i = 1; i < arrays.length - 1; i++) {
            //取出比较项
            current = arrays[i];
            //记录比较项前一项的下标
            int pre = i -1;
            //当前比较项数据小于前一项数据
            while (pre >= 0 && current < arrays[pre]) {
                //将前一项数据赋值给当前数据
                arrays[pre + 1] = arrays[pre];
                //下标前移 将比较项与更前边的数据进行比较
                pre--;
            }
            //当移到最前边 或者是比较项数据大于前一项数据的时候 将比较项赋值给前一项数据后边的位置
            arrays[pre + 1] =current;
        }

        return arrays;
    }

希尔排序

将序列分成一个矩阵,分为m列,逐列进行排序,m从某个整数逐渐减为1,当m为1的时候,整个序列将完全有序
希尔排序是插入排序的改进版本,是一个非稳定排序。

希尔排序介绍

快速排序

快速排序的本质就是把基准数大的都放在基准数的右边,把比基准数小的放在基准数的左边,这样就找到了该数据在数组中的正确位置.
再采用递归的方式分别对前半部分和后半部分排序,当前半部分和后半部分均有序时该数组就自然有序了。

void Quick_Sort(int *arr, int begin, int end){
    if(begin > end)
        return;
    int tmp = arr[begin];
    int i = begin;
    int j = end;
    while(i != j){
        while(arr[j] >= tmp && j > i)
            j--;
        while(arr[i] <= tmp && j > i)
            i++;
        if(j > i){
            int t = arr[i];
            arr[i] = arr[j];
            arr[j] = t;
        }
    }
    arr[begin] = arr[i];
    arr[i] = tmp;
    Quick_Sort(arr, begin, i-1);
    Quick_Sort(arr, i+1, end);
}

二分法查找

二分法查找的思路如下:

(1)首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。

(2)如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤(1)的操作。

(3)如果某一步数组为空,则表示找不到目标元素。

    public int binarySearch(int[] arr, int key) {
        int left = 0; //数组最小索引值
        int right = arr.length - 1; //数组最大索引值
        while (left < right) {
            int mid = (left + right) / 2;//获得中间值,将数组一分为二
            if (key == arr[mid]) {
                return mid + 1;
            } else if (key > arr[mid]) {//key大于中间值,因此在右侧的二分之一数组中再次寻找
                left = mid + 1;
            } else {//同理
                right = mid - 1;
            }
        }
        return -1;//没有找到
    }
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片 基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正 立即下载

相关推荐

CIFAR-100模型性能对比:Top1与Top5错误率深度解析

本文深度解析了CIFAR-100数据集上Top1与Top5错误率的核心意义与差异。通过对比MobileNet、ResNet、DenseNet等主流模型的性能数据,揭示了模型架构、训练策略及数据集特性如何共同影响这两个关键指标,并为不同应用场景下的模型选择提供了实战指南。

weixin_28224217的博客 339

经典排序算法之简单选择排序

前面在介绍冒泡排序的时候,有提到一种简单排序算法,就是从0开始,每次确定一个位置的元素。假设当前需要确定的位置下标为 i,则将i处的元素与后面的元素逐个比较,并将每次比较结果中较小的元素存放在i处,从而保证i处一直保存着最小元素。 简单的选择排序算法与这种算法思路一样,但是选择排序在比较的过程中,并没有将比较结果存放在i处,而是保存每次比较结果中 较小元素的下标到min中,从而保证m

芳草源的博客 1万+

基于51单片机语音识别智能台灯设计

智能台灯;语音识别;STC89C52RC单片机

Benso_H的博客 5842

排序算法之简单排序算法

排序算法排序算法: 排序算法: 非递归的简单选择排序算法 我对于简单选择排序算法的理解是:选择初始元素作为初始的比较值,然后选取后面的元素与第一个元素比较,如果大小不同则可以进行交换操作,当比较完最后一个元素时,第一个元素一定是最小的元素,其后选取第二个元素进行与第一步相同的比较与操作,最后就可以得到排好的顺序啦! //将一个数组作为参数传进简单选择排序算法中 void simpleSelect(...

MrLee12的博客 291

移动硬盘报错0x80070570?5分钟搞定CHKDSK修复(附详细参数说明)

本文针对移动硬盘报错0x80070570问题,提供了详细的CHKDSK修复方法。通过5分钟核心修复流程,指导用户使用系统自带工具快速修复文件系统逻辑错误,恢复硬盘访问。文章还深入解析了CHKDSK参数,并提供了备选数据恢复方案与日常防护建议。

app77的博客 234

Bladed风电仿真软件新手必看:从界面操作到功率曲线计算的完整指南

本文为风电工程师提供Bladed仿真软件的完整入门指南,涵盖界面操作、功率曲线计算及动态仿真等核心功能。通过实战技巧和常见问题解决方案,帮助新手快速掌握这款全球领先的风电机组仿真工具,提升风电项目开发效率。

weixin_30839881的博客 101

简单排序算法的实现

简单排序算法就是通过n-i次关键字的比较,从n-i+1个记录中选出关键字最小的记录. 主要思想就是交换移动的次数减少,通过比较把数据移到相应的位置,虽然算法复杂度根冒泡排序是一样的但是,性能上还是优于冒泡排序. 下面是具体的代码 头文件SeqList.h #include<stdio.h> #include<assert.h> #include<iostream&gt...

Zyong139064359的博客 329

Cursor集成Claude 4.6免费版:本地IDE合规调用指南

大语言模型编程助手(LLM Copilot)已成为现代开发标配,其核心能力依赖于上下文理解、代码推理与结构化输出等关键技术原理。Anthropic官方提供的Claude系列模型,尤其Claude 4.6,凭借200K超长上下文、tool use函数调用和严格可控的API设计,在工程实践中展现出显著技术价值。该能力可无缝嵌入本地IDE环境,支撑代码解释、跨文件分析、单元测试生成等高频开发场景。本文聚焦Cursor这一开源可审计IDE,详解如何合规复用Anthropic免费tier接口(/v1/messages

weixin_34095889的博客 537

排序算法5——简单选择排序

选择排序就是从待排序的元素中选择最小(最大)的元素,将其放在有序序列的相应位置,使这些元素构成有序序列。选择排序主要有两种:简单选择排序和堆排序。 【简单选择排序】 编写算法,要求使用简单选择排序算法对元素65、32、71、28、83、7、53、49进行从小到大排序。 【算法思想】 简单选择排序是一种简单的选择类排序算法,它的基本思想描述如下: 假设待排序的元素有n个,在第一趟排序过程...

凌空的桨 5846

使用Python爬虫抓取旅游景点评价数据并进行热度可视化

景点热度通常由景点的评分、评论数以及游客的热情度来决定。高热度的景点通常意味着更高的游客评分和更多的游客评论。热度不仅反映了景点的受欢迎程度,还可以揭示某些景点的潜力和存在的问题。评分:游客对景点的综合评分,通常是0到5分。评论数:景点的评论数量,反映了游客对景点的关注程度。热度变化:在一定时间内,景点的评价和评论数量变化,能够反映景点的热度波动。通过使用Python爬虫技术抓取旅游景点的评价和评论数据,我们能够深入分析景点的热度,并通过数据可视化工具将这些信息展示给用户。

2201_76125261的博客 1282

OpenCV自学记录(1)——(一拳超人)图像处理基础(图像获取、图像变化)

学习深度学习进行图像分类和目标检测时,要有一定的图像处理的基础。在学习深度学习之前,看了一本《图像处理技术基础》,现在也忘得差不多了,后悔当初没有整理记录下来。现在整理一下图像处理的常用方法,最后实现一个小项目——基于OpenCV的车牌号识别。 OpenCV自学记录(1)——图像处理基础(一)1、图像获取1.1获取图像数据1.2 获取摄像头图像数据2、图像变化2.1 移动(translation)...

qq_40784418的博客 1455

简单排序算法的C++实现

C++实现算法有冒泡排序/选择排序/插入排序/快排。

我壮着胆子再问一遍冬雪枫花 744

在 ABAP Push Channel 里玩转 Detached Client:用 Attach Handle 把 WebSocket 连接交接给业务逻辑

摘要:本文介绍了ABAP Push Channels (APC)中的Detached Client技术,该技术通过将WebSocket连接建立与后续处理分离,实现更高效的实时通信。核心流程包括创建连接、使用connect_and_detach交接连接、以及通过attach handle重新附着发送消息。文章还探讨了PCP协议和AMC技术在企业级推送场景中的应用,并通过示例代码展示了Detached Client的具体实现方式。这种设计解决了传统轮询的资源浪费问题,特别适用于生产线监控、客服系统等需要服务端主

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2313

排序算法-简单选择排序

简单选择排序法就是通过n-i次关键字比较,找到最小的关键字下标,最后在替换n-i下标和最小下标的值。 简单排序的思想和冒泡排序的思想的区别是冒泡排序是相邻关键字两两比较,如果小,则直接替换,可能在一轮循环会进行多次值交换。而简单选择排序法是一轮循环找到最小关键字下标,最后进行最多一次替换。 简单选择排序算法 ...

白杨 3692

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

简单选择排序算法总结

简单选择排序算法思路如下: 从头至尾扫描序列,找到最小的的元素和第一个元素交换,接着从剩下的记录中继续这样选择和交换,最终使序列有序。 代码如下:package test; import java.util.Arrays; public class InsertSort { public static void sort(int []a) { int i,j,k,temp; fo

qq297877375的博客 344

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

排序算法入门之简单选择排序

在学了冒泡排序后,会发觉这种算法就是不断比较交换。虽简单直接,显然给人一种繁琐的感觉。那有没有更好一点的算法呢?这当然有啦,没有就糟糕透了 :-P 这篇文章介绍一种较冒泡要好的排序算法:简单选择排序 看到“选择”这两字估计也猜到一二了。没错,这种算法的思想就是:待找到了最适合的那位数的位置我才选择与它进行交换 这样做,我们大大省下了很多不必要的交换。因为在代码编写中,交换函数是经常使用,所以

学无止境 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

简单选择排序算法

在简单选择排序过程中,所需移动记录的次数比较少。最好情况下,即待排序记录初始状态就已经是正序排列了,则不需要移动记录。   最坏情况下,即待排序记录初始状态是按逆序排列的,则需要移动记录的次数最多为3(n-1)。简单选择排序过程中需要进行的比较次数与初始状态下待排序的记录序列的排列情况无关。当i=1时,需进行n-1次比较;当i=2时,需进行n-2次比较;依次类推,共需要进行的比较次数是(n-

flying0033的专栏 2630

算法——java实现简单排序算法

public class SimpleSelectSort { /* 简单排序算法就是通过n-1次关键字间的比较,从n-i+1个记录中选出关键字最小的记录 冰河第i个记录交换之 */ //初始化数组 int parma[] = {}; //交换数组中的两个元素 public void swap(int parma[],int i,int j){ int temp = parma[i]; parma...

JackWu blog 212

排序算法2——图解简单选择排序及其实现

基本思想 通过n-i次关键字之间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录作交换 代码和上下界 比较过程如下 这样,最多经过n-1次交换,就能完成排序操作 下面分析简单选择排序的时间复杂度 无论最好或最坏的情况下,其比较次数都是一样多的, 第i趟需要进行n-i次关键字的比较,总共需要比较∑(n-i)=n(n-1)/2次,i从1到n-1, 而对于交换次数来说,当最...

优快云_dzh的博客 3387

C#实现简单排序算法

今天复习了下排序算法的简单选择排序,先描述,然后代码实现 代码实现如下 class Program { public static void Swap(ref int left, ref int right) { left = left + right; right = left - right;

fengzheng22的专栏 775

排序算法(1):简单选择排序

基本思想   简单选择排序是一种简单并且非常直观的排序算法。它的思想是每次从未排序序列中找到最小值,然后将其放到已排序序列的末尾,重复这一过程直到不存在未排序元素。 算法流程 以长度为 nnn 的数组为例: 第一趟排序:从第一个元素开始遍历整个数组,找出最小值,和第一个元素交换; 第二趟排序:找出第二个元素到第 nnn 个元素中的最小值,和第二个元素交换; 第三趟排序:找出第三个元素到...

Lucky_Go的博客 2246

排序算法之简单选择排序

基本思想: 将初始序列(A[0]~A[n-1])作为待排序序列,第一趟在待排序序列(A[0]~A[n-1])中找最小值元素,与该序列中第一个元素A[0]交换,这样子序列(A[0])有序;下一趟排序在待排序子序列(A[1]~A[n-1])中进行。第 i 趟排序,A[i-1]~A[n-1] 中,找到最小元素,与该子序列中第一个元素 A[i-1] 交换。经过n-1趟排序后使得初始序列有序。

happywq2009的专栏 739

简单排序算法的总结

在数据结构中,感觉排序是个挺有趣的地方,现在来说说其中的简单排序:冒泡排序, 简单选择排序,直接插入排序。     冒泡排序:不知道你的C 是怎么入门的,反正我是学的老谭的书过来的,一开始还觉得挺不错,可是现在才发现我被老谭坑了(不要拍砖)。就以冒泡来说,在老谭书里面是这样理解的:     void BubbleSort(SqList *L) //SqList 是一个包含了一个数组,和该数

GodLike 849

Java——简单选择排序算法

简单选择排序算法 简单选择排序是一种简单直观的排序算法。每一趟从待排序的记录中选出最小的元素,放入已排好序的序列后,直到全部记录排序完毕。 Java实现 public static void selectionSort(int[] array){ for (int i = 0; i < array.length; i++) { for (int j ...

H__Zhou的博客 225
上一篇: 数据结构之ArrayList
下一篇: 几种排序算法分析
gitzzp
博客等级 码龄11年 307粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值