当前位置: 首页 > 编程日记 > 正文

数组的各类排序

  1 package sort;
  2 
  3 /**
  4  * 数组的各种排序操作
  5  * Created by liuwei on 16/3/6.
  6  */
  7 public class MSort {
  8 
  9     /**
 10      * 直接插入排序
 11      * 外层一个循环,从第2个元素开始(下标为1),遍历后面的所有元素
 12      * 内层一个循环,从当前位置position =i 开始,每次与position-1的元素对比
 13      *      如果当前元素小于position-1的元素,position--
 14      *      如果当前元素大于等于position-1的元素,说明position就是我们要插入的地方
 15      * 内层循环的中止条件:因为我们每次都是与position-1做对比的,显然position>=1
 16      *
 17      * check下:
 18      *      当position==1的时候,进入while循环,
 19      *      如果当前元素大于等于下标为0的元素,直接break position=1
 20      *      如果当前元素小于下标为0的元素,position-- position=0 然后不满足循环条件,退出
 21      * */
 22     public static void straightInsertionSort(int[] nums){
 23         if(nums == null) return;
 24         for(int i=1; i < nums.length; i++){
 25             int position = i;
 26             while(position >=1){
 27                 if(nums[i] < nums[position - 1]){
 28                     position --;
 29                 }
 30                 else{
 31                     break;
 32                 }
 33             }
 34             int tmp = nums[i];
 35             for(int j = i; j>position;j--){
 36                 nums[j] = nums[j-1];
 37             }
 38             nums[position] = tmp;
 39         }
 40     }
 41 
 42     /**
 43      * 冒泡排序
 44      * 冒泡排序每次将最大的沉到最后面,每次确定一个最大的,
 45      * 因此,在内层循环的时候,每次实际需要遍历的个数-1
 46      * */
 47     public static void bubbleSort(int[] nums){
 48         if(nums == null) return;
 49         for(int i=1; i < nums.length; i++){
 50             for(int j = 0; j < nums.length - i; j++ ){
 51                 if(nums[j] > nums[j+1]){
 52                     int tmp = nums[j];
 53                     nums[j] = nums[j+1];
 54                     nums[j+1] = tmp;
 55                 }
 56             }
 57         }
 58     }
 59 
 60     /**
 61      * 快速排序
 62      * 快排的基本思想是选择一个标杆元素,将比标杆元素大的放置在它的后面,将比它小的放在它前面
 63      * 这样,我们就把原先的数组分成两部分,左边那部分全部比标杆元素小,右边那部分全部比标杆元素大
 64      * 这样,我们只要递归的处理左右两部分即可
 65      * */
 66     public static void quickSort(int[] nums,int left,int right){
 67         if(left < right){
 68             int flag = partition(nums,left,right);
 69             quickSort(nums,left,flag-1);
 70             quickSort(nums,flag+1,right);
 71         }
 72     }
 73 
 74     private static int partition(int[] nums, int left, int right) {
 75         int pivotekey = nums[left];
 76         while(left < right){
 77             while(left < right && nums[right] >= pivotekey) right --;
 78             nums[left] = nums[right];
 79             while(left < right && nums[left] <= pivotekey) left ++;
 80             nums[right] = nums[left];
 81         }
 82         nums[left] = pivotekey;
 83         return left;
 84     }
 85 
 86 
 87     /**
 88      * 选择排序
 89      * 简单选择排序的基本思想就是每次选择最大或者最小的放在最后面或者最前面的位置
 90      * */
 91     public static void simpleSelectionSort(int[] nums){
 92         if(nums == null) return;
 93         for(int i=1; i < nums.length;i++){
 94             int maxIndex = 0;
 95             for(int j=0;j <= nums.length - i;j++){
 96                 if(nums[j] > nums[maxIndex]){
 97                     maxIndex = j;
 98                 }
 99             }
100             int tmp = nums[maxIndex];
101             nums[maxIndex] = nums[nums.length - i];
102             nums[nums.length - i] = tmp;
103         }
104     }
105 
106     /**
107      * 归并排序
108      * 归并排序最本质的思想是利用两个有序数组O(m+n)时间复杂度的合并
109      * 但是,有个前提,必须是有序数组,但是给的肯定只有一个待排序的无序数组,怎么构成有序呢?
110      * 因此,这里就需要划分,当划分成n份,每个小组只有一个元素,这时候,再选出两组,一合并就是有序的了,以此类推
111      * */
112     public static void mergingSort(int[] nums,int left,int right){
113         if(left < right){
114             int mid = left + (right - left) / 2;
115             mergingSort(nums,left,mid);
116             mergingSort(nums,mid+1,right);
117             merge(nums,left,mid,right);
118         }
119     }
120 
121     private static void merge(int[] nums, int left, int mid, int right) {
122         int[] tmps = new int[right - left + 1];
123         int i = left,j = mid+1;
124         int k = 0;
125         while(i<=mid && j <=right){
126             if(nums[i] <= nums[j]){
127                 tmps[k++] = nums[i];
128                 i++;
129             }
130             else{
131                 tmps[k++] = nums[j];
132                 j++;
133             }
134         }
135         while(i<=mid){
136             tmps[k++] = nums[i];
137             i++;
138         }
139         while(j<=right){
140             tmps[k++] = nums[j];
141             j++;
142         }
143         for(k=left; k<=right; k++){
144             nums[k] = tmps[k - left];
145         }
146     }
147 
148     private static void show(int[] nums){
149         for(Integer i : nums){
150             System.out.print(i+" ");
151         }
152         System.out.println();
153     }
154 
155     public static void main(String[] args) {
156         int[] nums = {1,3,5,7,9,0,8,6,4,2};
157 //        int[] nums = {14,49,38,65,97,76,13,27};
158 //        bubbleSort(nums);
159 //        straightInsertionSort(nums);
160 //        quickSort(nums,0,nums.length-1);
161 //        simpleSelectionSort(nums);
162         mergingSort(nums,0,nums.length -1);
163         show(nums);
164     }
165 }

转载于:https://www.cnblogs.com/nashiyue/p/5250326.html

相关文章:

Virtualbox安装使用注意

1.VirtualBox升级到4.3以后不能打开 提示创建 COM 对象失败 应用程序将被中断 解决方案&#xff1a;右键VirtualBox的桌面快捷方式&#xff0c;选择属性&#xff0c;选到兼容性选项卡&#xff0c;勾选“以兼容模式运行这个程序”&#xff0c;下拉框选择Windows Server 2008 …

机器学习项目模板:ML项目的6个基本步骤

来源 | DeepHub IMBA每个机器学习项目都有自己独特的形式。对于每个项目&#xff0c;都可以遵循一组预定义的步骤。尽管没有严格的流程&#xff0c;但是可以提出一个通用模板。准备问题不仅是机器学习&#xff0c;任何项目的第一步都是简单地定义当前的问题。您首先需要了解背景…

ib_logfile 在数据库中有何作用?

ib_logfile 在数据库中有何作用&#xff1f; ib_logfile0/ib_logfile1 文件在数据库中起什么作用&#xff1f; 如果被删除&#xff0c;对数据库有何影响&#xff1f; ----->>>>>>>>>>> 回复 #1 mugua_xinli 的帖子 用于存放InnoDB引擎的事…

Podfile 常见语法

source URL &#xff1a; 指定镜像仓库的源 platform : ios, 6.0 &#xff1a; 指定所支持系统和最低版本 inhibit_all_warnings! &#xff1a;屏蔽所有warning workspace 项目空间名&#xff1a; 指定项目空间名 xcodeproj 工程文件名&#xff1a;指定xcodeproj工程文件名 …

今天学完了ccna

通过10天的学习&#xff0c;终于学完了NA&#xff0c;但是会不会呢&#xff1f;还是个未知数&#xff0c;再就也一知半解的。觉得基础知识太差了&#xff0c;可是看书&#xff0c;又觉得太长了&#xff0c;太多了&#xff0c;晚上老是停电 白天啥也看不进去。热。还是静不下心&…

攀登数据科学家和数据工程师之间的隔墙

来源 | 数据派 THU机器学习的教育和研究重点往往集中在数据科学过程的模型构建、训练、测试和优化等方面。要使这些模型投入使用&#xff0c;需要一套工程专长和组织结构&#xff0c;对于其中的标准尚不存在。有一个架构可以指导数据科学和工程团队相互协作&#xff0c;从而将机…

js变量以及其作用域详解

2019独角兽企业重金招聘Python工程师标准>>> 一、变量的类型 Javascript和Java、C这些语言不同&#xff0c;它是一种无类型、弱检测的语言。它对变量的定义并不需要声明变量类型&#xff0c;我们只要通过赋值的形式&#xff0c;可以将各种类型的数据赋值给同一个变…

在A*寻路中使用二叉堆

在A*寻路中使用二叉堆 作者&#xff1a;Patrick Lester&#xff08;2003年4月11日更新&#xff09; 译者&#xff1a;Panic 2005年3月28日 译者序&#xff1a; 这一篇文章&#xff0c;是“A* Pathfinding for Beginners.”&#xff0c;也就是我翻译的另一篇文章A*寻路初探…

“Hey Siri” 背后的黑科技大揭秘!

作者 | Vishant Batta译者 | 苏本如&#xff0c;责编 | 伍杏玲出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;以下是译文&#xff1a; 如今苹果手机可随时检测并回答“Hey Siri”命令&#xff0c;有人可能会想&#xff0c;它是不是在随时记录我们的日常生活对话呢…

[ASP.NET4之旅]Circular file references are not allowed

将ASP.NET 2.0的项目升级到ASP.NET 4后&#xff0c;用VS2010编译站点&#xff0c;某些控件出现编译错误“Circular file references are not allowed”&#xff0c;比如&#xff1a; <% Control Language"C#"ClassName"NewsRight"%>解决方法&#xf…

IOS-XMPP

一、即时通讯技术简介 即时通讯技术&#xff08;IM -- Instant Messaging&#xff09;支持用户在线实时交谈。如果要发送一条信息&#xff0c;用户需要打开一个小窗口&#xff0c;以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈的内容有许多的IM系统&#xff0c;如AO…

libcurl使用

官网&#xff1a;http://curl.haxx.se/libcurl/c/libcurl-tutorial.html #curl-config --libs 得到 -lcurl #cc libcurl_test.c -o libcurl_test -lcurl 所有的例子&#xff1a;http://curl.haxx.se/libcurl/c/example.html 例子&#xff1a; /***********************…

RH5.4下samba共享配置实例(3)

一、基于用户名的访问控制实例&#xff1a; 王乾大哥写的比较详细了&#xff0c;我是跟着他的教程学习的&#xff0c;按照他的教程走一边&#xff1b; 要求如下&#xff1a; 1、创建一个公共的交换文件夹&#xff0c;所有人都可以写入删除&#xff0c;但不能删除修改其他人的文…

《评人工智能如何走向新阶段》后记(再续21)

346.中国抗疫十大黑科技&#xff08;以人工智能为主力的黑科技&#xff09; 摘自数邦客&#xff08;2020.3.30发布&#xff09; 负压救护车 人工智能机器人&#xff1a;如送餐机器人、消毒机器人、服务型机器人&#xff0c;及机器人呼叫等呼吸道病毒核配检测试剂盒&#xf…

ssh-keygen

nagios npc安装后状态为off的解决方法

1、检查ndo2db的进程是不是二个 nagios 16825 0.0 0.1 6784 396 ? Ss 19:05 0:00 /usr/local/nagios/bin/ndo2db -c /usr/l nagios 17032 0.0 0.3 6784 1268 ? S 19:09 0:00 /usr/local/nagios/bin/ndo2db -c 2、检查nagios.log日志看…

C语言extern关键字定义外部变量--Redis源码extern使用

在Redis2.8中有networking.c&#xff0c;这个文件没有networking.h networking.c首先引入redis.h这个头文件 #include "redis.h" 在redis.c一开始就声明了全局变量 /* Global vars */ struct redisServer server; networking.c的createClient函数 redisClient *cr…

深度学习面试必备的25个问题

作者 | Tomer Amit译者 | 弯月&#xff0c;编辑 | 屠敏出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;在本文中&#xff0c;我将分享有关深度学习的25个问题&#xff0c;希望能够帮助你为面试做好准备。1.为什么必须在神经网络中引入非线性&#xff1f;答&#xf…

一分钟了解阿里云产品:先知计划

一、 概述 阿里云发布了各种各样的产品&#xff0c;今天让我们一起来了解下阿里云先知计划吧。 什么是先知计划呢&#xff1f; 先知计划是一个帮助企业建立私有应急响应中心的平台&#xff08;帮助企业收集漏洞信息&#xff09;。企业加入先知计划后&#xff0c;可…

C语言的HashTable简单实现

原文地址&#xff1a;http://blog.csdn.net/zmxiangde_88/article/details/8025541 HashTable是在实际应用中很重要的一个结构&#xff0c;下面讨论一个简单的实现&#xff0c;虽然简单&#xff0c;但是该有的部分都还是有的。 一&#xff0c;访问接口 创建一个hashtable. h…

GitHub标星2000+,如何用30天啃完TensorFlow2.0?

作者 | 梁云1991来源 | Python与算法之美&#xff08;ID:Python_Ai_Road&#xff09;天下苦tensorflow久矣&#xff01;尽管tensorflow2.0宣称已经为改善用户体验做出了巨大的改进&#xff0c;really easy to use&#xff0c;但大家学得并不轻松。tensorflow2.0官方文档和tenso…

【Struts2学习笔记(1)】Struts2中Action名称的搜索顺序和多个Action共享一个视图--全局result配置...

一、Action名称的搜索顺序 1&#xff0e;获得请求路径的URI&#xff0c;比如url是&#xff1a;http://server/struts2/path1/path2/path3/test.action 2&#xff0e;首先寻找namespace为/path1/path2/path3的package&#xff0c;假设不存在这个package则运行步骤3&#xff1b;假…

大话卷积神经网络CNN,小白也能看懂的深度学习算法教程,全程干货建议收藏!...

来源 | 程序员管小亮本文创作的主要目的&#xff0c;是对时下最火最流行的深度学习算法的基础知识做一个简介&#xff0c;作者看过许多教程&#xff0c;感觉对小白不是特别友好&#xff0c;尤其是在踩过好多坑之后&#xff0c;于是便有了写这篇文章的想法。由于文章较长&#x…

频繁分配释放内存导致的性能问题的分析--brk和mmap的实现

&#xfeff;现象1 压力测试过程中&#xff0c;发现被测对象性能不够理想&#xff0c;具体表现为&#xff1a; 进程的系统态CPU消耗20&#xff0c;用户态CPU消耗10&#xff0c;系统idle大约70 2 用ps -o majflt,minflt -C program命令查看&#xff0c;发现majflt每秒增量为0&…

Linux 服务器日志文件查找技巧精粹

用来在日志文件里搜索特定活动事件的工具不下几十种&#xff0c;本文将介绍搜索日志文件时应该采取的策略。然后&#xff0c;通过几个具体示例介绍一些使用grep命令手动搜索日志文件的办法。接下来&#xff0c;我们将看到 logwatch工具和logsurfer工具的用法。最后&#xff0c;…

程序猿面试什么最重要?

程序猿面试一直是社区乐于讨论的热门话题。我自己从06年实习以来。先后经历了4家软件公司。所有是外企。当中有世界500强的通信企业&#xff0c;有从事期权期货交易的欧洲中等规模的金融公司&#xff0c;也有为大型汽车制造商开发Android智能汽车的新兴公司。跨入IT行业以来。我…

open的O_DIRECT选项

http://blog.chinaunix.net/uid-223060-id-2127385.html http://blog.csdn.net/hhtang/article/details/6605951 查看磁盘分区&#xff1a; #df -h #tune2fs -l /dev/mapper/VolGroup-lv_root 或者 #dumpe2fs /dev/mapper/VolGroup-lv_root|grep -i "block size"…

2020 年,AI 芯片内存哪家强?

目前多家公司都在开发网络边缘系统的AI芯片&#xff0c;本文作者详细分析AI边缘芯片遇到的问题和挑战&#xff0c;并给出一些新的内存技术解决方案。作者 | Mark LaPedus译者 | 弯月&#xff0c;责编 | 伍杏玲封图 | CSDN下载自视觉中国出品 | CSDN&#xff08;ID:CSDNnews&…

Excel数字、文本混合列导入SQL Server出现的问题&解决办法

版权声明&#xff1a;转载时请以超链接形式标明文章原始出处和作者信息及本声明http://annie-out.blogbus.com/logs/60276495.htmlExcel文件&#xff1a;序号 姓名 内部电话 住址 1 小李 1234 …… 2 小王5678……3小张2345(国内长途&#xff09;…………………………如上结构的…

ARM 位置无关代码(PIC)的分析理解

2019独角兽企业重金招聘Python工程师标准>>> PIC的特点是&#xff1a; 它被加载到任意地址空间都可以正确的执行。其原理是PIC对常量和函数入口地址的操作都是基于PC偏移量的寻址方式。即使程序被移动&#xff0c;但是PC也变化了&#xff0c;而偏移量是不变的&#…