[转]4种排序方式附源代码


冒泡排序
public class BubbleSort {
 public  static void sort(int[] data, int n) {
  int sortedNum = 0;
  int index;
  while (sortedNum < n) {
   for (index = 1; index < n - sortedNum; index++) {
    if (data[index - 1] > data[index]) {
     int tmp;
     tmp = data[index - 1];
     data[index - 1] = data[index];
     data[index] = tmp;

    }
   }
   sortedNum++;
  }
 }

}
选择排序
public class SelectSort {
 public static void sort(int[] data, int n) {
  int sortedNum = 0;
  int index;
  int maxIndex = 0;
  while (sortedNum < n) {
   for (index = 1; index < n - sortedNum - 1; index++) {
    if (data[maxIndex] < data[index]) {
     maxIndex = index;
    }
   }
   int tmp;
   tmp = data[maxIndex];
   data[maxIndex] = data[n - sortedNum - 1];
   data[n - sortedNum - 1] = tmp;
   sortedNum++;

  }

 }

}

插入排序
public class InsertSort {
 public static void sort(int[] data, int n) {
  int sortedNum = 1;
  int index;
  while (sortedNum < n) {
   int tmp = data[sortedNum];
   for (index = sortedNum; index > 0; index--) {
    if (tmp < data[index - 1]) {
     data[index] = data[index - 1];
    } else {
     break;
    }
   }
   //插入的他的位置
   //index就是找TMP的位置
   data[index] = tmp;
   sortedNum++;
   
   for(int i=0;i<n;i++){
    System.out.print(data[i]+"," ;
   }
   System.out.println("" ;
  }

 }

}

快速排序
public class QuickSort {

 public static void sort(int[] data, int n) {
  quickSortRescursive(data, 0, n - 1);
 }

 private static void quickSortRescursive(int[] data, int left, int right) {

  int pos;
  if (left >= right)
   return;
  pos = getPos(data, left, right);
  // 排左边的
  quickSortRescursive(data, left, pos - 1);
  quickSortRescursive(data, pos + 1, right);
 }

 private static int getPos(int[] data, int left, int right) {
  // 想左边移动
  while (true) {
   //遇到右边的大就忽略,并且缩小右边范围
   while (left < right && data[left] < data[right])
    right--;
   
   //遇到左边的大就往右边换
   if (left < right)
    swap(data, left++, right);
   else
    return left;
//   遇到右边的大就忽略,并且左边缩小范围
   while (left < right && data[left] < data[right])
    left++;
   if (left < right)
    //遇到左边的大就往右边换
    swap(data, left, right--);
   // return left;

   else
    return right;
   // return 0;
  }

 }

 private static void swap(int[] data, int i, int j) {
  int tmp = data[i];
  data[i] = data[j];
  data[j] = tmp;

 }

}
常见八大排序(附动图及W字详解)(C语言)《数据结构与算法》 直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序,计数排序附带动图及W字详解,强烈建议进收藏夹吃灰哈。 阅读详情

相关推荐

c语言经典排序算法(8种-含源代码)

常见经典排序算法 1.希尔排序 2.二分插入法 3.直接插入法 4.带哨兵的直接排序法 5.冒泡排序 6.选择排序 7.快速排序 8.堆排序

常见排序及代码实现

1 冒泡排序 1.1 排序说明 所谓冒泡,说的是每次都是相邻元素进行比较,从开始索引到结束索引,不断冒出的过程。 以升序为例: 第一轮 所有元素都参与,从索引0元素开始,和索引1元素相较,如果索引大的数值小,则互换位置,接着索引1元素继续以同样的方式和索引2元素相较……一直到最后一个元素。 第一轮下来,就能将所有元素中最大的元素冒泡到最后索引的位置。 第二轮 一样从索引0元素开始冒泡,不过第一轮已经确定最后一个为最大元素,所以这次只需要冒泡到倒数第二个元素。 第二轮也一样,可以将这次参与冒泡的元素中的最大

5683的博客 585

常见的几种内排序算法以及实现(C语言)

主要的内排序包括冒泡、插入、希尔、堆排序、归并、快速、桶排序等,本源码对其用C语言实现,并且进行了简答的测试,可以准确运行,其算法源码以及测试主程序都在源码文件main.c中

C语言实现堆排序

#include "sort_.h" void print_array(int *arr, int n) // 打印数组 { if(n==0){ printf("ERROR: Array length is ZERO\n"); return; } printf("%d", arr[0]); for (int i=1; i<n; i++) { printf(" %d", arr[i]); } printf(

helpluozhao123的博客 368

C#的四种排序算法的源代码

C#的四种排序算法,源程序代码,公交流使用。

C语言五种排序法程序

C语言五种排序法程序 vc6.0 源码文档

详解C语言的四种排序:冒泡排序、选择排序、插入排序、快速排序

C语言中有三种经典的简单排序:选择排序、冒泡排序、插入排序以及快速排序。总结一下这四种排序。

m0_73613541的博客 1万+

4种排序算法

编程实现排序算法,冒泡排序、选择排序、插入排序、快速排序。

将四个整数按照升序排序

如何将四个数按照从小到大进行排序? 作者采用的是先输入四个数存入数组中,然后进行比较,最小的放在数组第一位,循环往复,数组内的值即为按升序排列,然后将数组值输出 输入:7 4 9 2 则输出: 2 4 7 9 下面代码可直接使用 #include&lt;stdio.h&gt; int main() { int i,a[4],min,temp; printf("输入四个整数:"); for(i...

一只睡不醒的猪 5275

车载以太网测试技术解析

在智能汽车与HiL测试领域,高效解析与模拟车载网络通信是开发验证的关键。ZD-Converter 2000以媒体/介质转换器、嗅探器、拦截器、仿真器四合一的颠覆性设计,成为工程师应对复杂车载以太网测试的瑞士军刀。它支持双路车载/标准以太网智能转换、实时通信嗅探、硬件级数据拦截及ECU通信模拟,更通过串口命令实现全参数远程配置,赋能自动化测试流程。本文将深度解析其核心功能与实战应用场景。

Triv2025的博客 1142

【学长笔记】关于车牌识别的CCPD数据集按比例划分

本文介绍了一个用于CCPD车牌数据集划分的Python脚本,主要功能包括:1) 将数据集按比例划分为训练集、验证集和测试集;2) 支持图像与标签文件校验;3) 可自定义划分比例和样本数量限制;4) 自动生成标准目录结构。脚本使用随机种子确保可重复性,并通过tqdm显示进度条。处理后数据可直接用于YOLO等目标检测模型的训练与评估,建议在预处理完成后立即执行划分以避免数据泄露。文章还提供了相关技术博客的参考链接。

apple_53308981的博客 1477

C语言:输入四个数a,b,c,d,将这四个数由小到大排序

/*输入四个数a,b,c,d,将这四个数由小到大排序*/ #include <stdio.h> #include <conio.h> void main (void) { int a,b,c,d,t; printf ("请输入4个整数,空格分隔,回车结束\n"); scanf ("%d%d%d%d",&a,&b,&c,&d); if...

小七月的博客 2万+

自制电吉他效果器 DIY PCB(二)电路图分析

自制DIY电吉他效果器 PCB(二)电路图分析 要自制一款效果器,看懂电路图是必须的,即使你已经有了完整的设计电路图,在电路的绘制已久焊接的时候电路知识都会用到。 在效果器电路中,比较简单的是过载失真类效果器的电路。混响延迟等与声相有关的由于电路比较复杂本人也没有尝试过。其他的例如EQ、哇音等等效果器复杂程度依设计各不相同,在能做出过载失真类效果器后,可以自行尝试。 我这里主要为大家介绍失真效果器...

qq_41342525的博客 2万+

各种排序算法及Python源代码

文章目录排序算法排序算法稳定性冒泡排序源代码选择排序源代码插入排序源代码希尔排序源代码 排序算法 排序算法稳定性 在满足排序规则的前提下,保持原有顺序即具备稳定性,不保持原有顺序即不具稳定性 冒泡排序 源代码 具备稳定性,最坏时间复杂度=O(n^2) def bubble_list(list): for i in range(len(list)): for k in range(len(list)-1-i): if list[k] > list[k

使者大牙ℂypher的博客 2274

利用Solidworks2020将挖掘机装配体转换为URDF模型

利用Solidworks2020将挖掘机装配体转换为URDF模型一、下载sw_urdf_exporter插件 URDF(Universal Robot Description Format)——通用机器人描述格式,它是ROS里边使用的一种机器人的描述文件,包含的内容有:连杆、关节,运动学和动力学参数、可视化模型、碰撞检测模型等。 一、下载sw_urdf_exporter插件 ROS提供了SolidWorks转URDF的插件(下载链接)—sw2urdfSetup.exe,下载后点击安装,安装完成后就能在sol

weixin_48192326的博客 6101

[PayPal报错]为遵守国际法规,这笔交易已被拒绝。

PayPal报错解决:为遵守国际法规,这笔交易已被拒绝。

qq_39906413的博客 1万+

希尔排序C++实现(附完整可运行源代码)

希尔排序(Shell) 思想:每次获取数组中最小的数放在最前面,共进行n-1轮 优缺点:好理解易实现,但是效率低下且不稳定 复杂度: 不需要额外的辅助空间,空间复杂度为O(1) 时间复杂度:O(n^2) 稳定性:不稳定 【例如{5,2,5,1},第一轮就把前面的5换到了后面】 源代码 在这里插入代码片 仍有不足,欢迎交流。 ...

qq_43685399的博客 2070

从零开始讲DDR(7)——modelsim独立仿真DDR4

本文主要内容为DDR4 MIG ip核仿真,modelsim独立仿真DDR4。在进行DDR仿真的时候,我们会面临一个以往常规仿真不存在的问题:DDR本身并不是一个我们通过RTL代码设计出来的部件,常规的模块或者IP仿真,都是基于RTL代码就能进行的,但是回顾一下我们DDR的开发流程,调用的IP核也只是MIG ip,其本质是一个DDRC+DDRPYH的组合,并不能模拟任何DDR本身的行为,因此,在进行仿真之前,我们首先要做的就是获取DDR的仿真模型。

apple_53311083的博客 3224

选择排序 – 算法、源代码、时间复杂度

‌选择排序是一种简单排序算法,它的基本思想是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放到序列的起始位置,然后再从剩余未排序的元素中继续寻找最小(或最大)元素,放到已排序序列的末尾,以此类推,直到全部待排序的数据元素排完‌。‌描述选择排序的工作原理。包括选择排序的 Java 源代码。展示如何推导其时间复杂度(无需复杂的数学运算)。并检查 Java 实现的性能是否与预期的运行时行为相匹配。2. 示例:对扑克牌进行排序将扑克牌分拣到手中是插入排序的经典案例。选择排序。

在技术的广袤天地里,本博客如精准罗盘。剖析前沿科技,深掘代码奥秘,以精炼笔触,带您穿越复杂技术迷宫,速达知识彼岸。 1174

PTP(确时间协议,Precision Time Protocol)时间同步

主时钟定期发送带预估发送时间 t1 的报文(若支持硬件时间戳,实际 t1​ 由后续的Follow_Up报文携带)。所有设备启动后通过协商选举出唯一主时钟(Grandmaster),其余设备自动成为从时钟(Slave)。:从时钟记录接收时间 t2,随后向主时钟发送Delay_Req并记录发送时间 t3​。若使用支持PTP的交换机,可修正报文在交换机内的驻留时间,进一步提升精度。从时钟根据offset调整本地时钟,实现与主时钟同步。动态调整本地时钟,抵消传输延迟和时钟漂移。(或通过BMCA自动当选)。

努力努力努力 1303

[QMT量化交易小白入门]-八十九、深度学习训练多维特征进行金融价格行情预测

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 218

快速排序C++实现(附完整可运行源代码)

快速排序(Quick sort): 思想:选一个基准元素,将比该元素小的放在左边,大的放在右边,以此分割,再将分割所得子序列按同样的方式分割,直到原序列有序。 优缺点:快、数据移动少、但是不稳定 复杂度:平均时间复杂度:O(nlogn)、最好:O(nlogn)、最坏:O(n^2) 空间复杂度:最好:O(logn)、 最坏:O(n) 稳定性:不稳定 源代码 /**************************************** 题目:快速排序。 编写划分函数:以一个随机的数, 将数组分为

qq_43685399的博客 2103

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

排序2——冒泡排序,快速排序(3种递归方式+3种非递归方式)

然后也是将key的左序列和右序列再次进行这种单趟排序,如此反复操作下去,直到左右序列只有一个数据,或是左右序列不存在时,便停止操作。

2301_80224556的博客 1401

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

排序算法——归并排序和桶排序

读完本文,完全学会归并列和桶排序。可以将其看作是n个有序的子序列,每一个子序列个数为一,然后开始两两合并,这是子序列个数/2(此时,每一个子序列个数为2),然后再开始两两合并,以此类推,直到所有的数据都在同一个序列内才停止(两两合并指的是两个子序列进行排序合并),基数排序(Radix sort)是将所有数据按照从最低位开始进行排序,也就是按照个位,十位,百位,千位........,而判断需要进行几次排序,则是根据数据中最大位数来...

weixin_57154303的博客 2414

JS 数组排序 ( 4种方法 )

JavaScript内置sort()方法对数组排序,默认按字符串顺序,传入比较函数实现自定义排序。另有reverse()可反转数组顺序。对于复杂排序场景,可结合自定义逻辑或第三方库如Lodash。

大剑师兰特的GIS世界 4939

常用的几种排序,卖菜的王婆已经学废了,你不来瞅瞅?

常用的八种排序1.冒泡排序2.插入排序3.希尔排序4.选择排序5.堆排序6.快速排序(重要)7.归并排序(重要)8.计数排序各种排序方式的复杂度及稳定性比较 对一个数组进行排序你该不会只会用库函数的sort函数吧?没关系,看完这篇,分分钟带你学废八种排序 1.冒泡排序 冒泡排序(Bubble Sort),这是排序算法里面最简单的一个,这个名字由来就是把越大的元素经过慢慢的交换慢慢“浮”到最上面,就好像碳酸饮料中的二氧化碳一样最终会上浮到顶端,所以取名“冒泡排序”。 动图演示: 可以看出来,数

m0_56793367的博客 1466
上一篇: shell script学习笔记三
下一篇: Tomcat的class加载的优先顺序一览
flyingjava
博客等级 码龄20年 9粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值