冒泡、快速排序小结

1.冒泡排序

   (1) 比较领近的两个数

 (2) 如果左边的比右边的数字大,则交换位置

 (3) 向右移动一位,继续比较相邻的两个数

  排序示例:

 一轮排序结束后,最大值的位置已经移动最右端,再次如此循环,最终经过n-1次则完成最终排序。

使用java算法表示外部循环,需要经过n-1次。

  for(int i=0;i<n-1;i++)

内部循环由于外部循环每完成一次就有一个数字完成最终排序,则需要经过n-1-i次比较

  for(int j=0;j<n-1-i;j++)

最终冒泡排序的java算法为:

  int[] a=new int[]{18,19,5,8,3};int n=a.length;for(int i=0;i<n-1;i++){for(int j=0;j<n-1-i;j++){if(a[j]>a[j+1]){int temp=a[j+1];a[j+1]=a[j];a[j]=temp;}}}for(int k=0;k<n;k++){System.out.println("**"+a[k]);}

 

2.快速排序

 思路:基于分治的思想,是冒泡排序的改进版。首先在数组中选择一个基准点,然后从数组的两端开始扫描,设置lo指标指向开始端,hi指向结尾端。

从后半部分开始扫描,如果扫描到有比基准点值小的,则把这个值赋值给基准点位置。然后从前部分扫描,扫描比基准点大的元素,扫描到后把该元素赋值与上一个移动的元素。

如此循环,直到lo,hi指针重合,则结束一轮循环。这次把基准点的值赋值给最后一个变动的元素,这时,基准点前面都是比它小的元素,后面都是比它大的,也就是是确定了基准点的最终位置。

排序过程如下:

原始数据      72   6   57     83     42    34    81     12      29        {72 设置为基准点,lo指向开始,hi指向结尾。从后面扫描,发现29<72 把29赋值为72}

现在数据      29   6   57     83     42    34    81     12   (29)      {从前面扫描,找比72大的,扫描到83,则把83赋值给(29)处}

现在数据      29   6   57  (83)  42    34    81     12       83        {从后面扫描,找比72小的,发现12,将12赋值给(83)}

现在数据      29   6   57     12     42    34    81    (12)     83        { 从前面扫描,找比72大的,发现81,把81赋值给(12)}

现在数据      29   6   57     12     42    34   (81)    81      83         {hi  lo 重合,基准点72赋值给(81),完成一次循环}

一轮数据      29   6    57    12     42    34     72     81      83        {基准点的最终位置确定}

其过程图如下:

其算法实现找到基准点位置:需要定义lo,hi

 

   private int partition(int sortArray[],int low,int hight){/*** key 值为基准点的值  */int key = sortArray[low];while(low<hight){/*** 从后半部分开始扫描,大于key的,hi直接-1,如果小于key,则把该元素赋值给array[lo];*/while(low<hight && sortArray[hight]>=key)hight--;sortArray[low] = sortArray[hight];/*** 从前半部分扫描,小于key的,lo直接+1,如果大于key,则把该元素赋值给array[hi];*/while(low<hight && sortArray[low]<=key)low++;sortArray[hight] = sortArray[low];}/*** 然后lo hi重合时,结束,把key赋值给array[lo]即可*/sortArray[low] = key;return low;}

到此找到基准点的最终位置,然后以基准点现在位置,分为左右两部分,在循环上面的操作

 public void sort4(int[] data,int low,int hight){if(low<hight){int result = partition(data,low,hight);sort4(data,low,result-1);sort4(data,result+1,hight);}}

 

 

 

转载于:https://www.cnblogs.com/galibujianbusana/p/6536725.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/396523.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python中until函数_等待应用程序窗口:python中的pywinauto.timings.WaitUntilPasses

我试图在pywinauto中使用waituntilpasses来给应用程序时间打开一个新窗口.我已使用SWAPY识别窗口详细信息.为了进行测试,我手动打开了子窗口,因此WaitUntilPasses应该立即看到该窗口,但是没有看到.语法显示为OK,因为我可以找到并打印find_windows的输出,如下所示&#xff1a;xx…

synchronized 异常_由浅入深,Java 并发编程中的 Synchronized

synchronized 作用synchronized 关键字是 Java 并发编程中线程同步的常用手段之一。1.1 作用&#xff1a;确保线程互斥的访问同步代&#xff0c;锁自动释放&#xff0c;多个线程操作同个代码块或函数必须排队获得锁&#xff0c;保证共享变量的修改能够及时可见&#xff0c;获得…

mysql正则通配符全解_mysql正则表达式与通配符

扩展正则表达式的一些字符是&#xff1a; “.”匹配任何单个的字符。 一个字符类“[...]”匹配在方括号内的任何字符。例如&#xff0c;“[abc]”匹配“a”、“b”或“c”。为了命名字符的一个范围&#xff0c;使用一个“-”。“[a-z]”匹配任何小写字母&#xff0c;而“[0-9…

dos常用文件操作命令

1、DIR 含义&#xff1a; 显示指定目录下的文件和子目录列表 类型&#xff1a; 内部命令 格式&#xff1a; DIR[drive:][path][filename][/p][/w][/A[[:]attributes]][/O[[:]sortorder]][/S][/B][/L] 举例&#xff1a; DIR DIR D:\px2 DIR D:\px2\*.txt DIR /A:D /O:D 2、COPY…

使您的Java代码闻起来很新鲜

by Marco Massenzio由Marco Massenzio 使您的Java代码闻起来很新鲜 (Make your Java code smell nice and fresh) A few years ago I joined a startup working on a cloud enterprise service that was originally built by an offshore team.几年前&#xff0c;我加入了一家…

MySQL时间戳与日期格式的相互转换

MySQL时间戳与日期格式的相互转换&#xff0c;PHP时间戳与日期格式的相互转换 MySQL: 获取当前时间SELECT NOW(); // 2018/10/11 14:22:51 时间日期格式转换成时间戳格式&#xff0c;UNIX_TIMESTAMP()SELECT UNIX_TIMESTAMP(NOW()); // 1539238930 时间戳格式转换成时间日期格式…

Linux内存分配机制之伙伴系统和SLAB

转载请注明原文地址&#xff1a;http://www.cnblogs.com/ygj0930/p/6539590.html 内核内存管理的一项重要工作就是如何在频繁申请释放内存的情况下&#xff0c;避免碎片的产生。这就要求内核采取灵活而恰当的内存分配策略。通常&#xff0c;内存分配一般有两种情况&#xff1a…

this.$modal.confirm 自定义按钮关闭_自定义函数,让你玩转Excel得心应手

让“自动更正”输入统一的文本&#xff0c;你是不是经常为输入某些固定的文本,如《电脑报》而烦恼呢?那就往下看吧。1.执行“工具→自动更正”命令,打开“自动更正”对话框。2.在“替换”下面的方框中输入“pcw”(也可以是其他字符,“pcw”用小写),在“替换为”下面的方框中输…

php mysql 排名算法_MySQL PHP:优化排名查询和计数子查询

这是原始数据,并希望根据得分(count(tbl_1.id))对它们进行排名.[tbl_1]id | name1 | peter2 | jane1 | peter2 | jane3 | harry3 | harry3 | harry3 | harry4 | ron因此,制作临时表(tbl_2)来计算每个id的分数.SELECT id, name, COUNT( id ) AS scoreFROM tbl_1GROUP BY idORDER…

CCF-CSP 最大的矩形

问题描述在横轴上放了n个相邻的矩形&#xff0c;每个矩形的宽度是1&#xff0c;而第i&#xff08;1 ≤ i ≤ n&#xff09;个矩形的高度是hi。这n个矩形构成了一个直方图。例如&#xff0c;下图中六个矩形的高度就分别是3, 1, 6, 5, 2, 3。请找出能放在给定直方图里面积最大的矩…

Stack Overflow 2016年对50,000名开发人员进行的调查得出的见解

Today, Stack Overflow released the results of their 2016 survey of more than 50,000 developers.今天&#xff0c;Stack Overflow发布了他们2016年对50,000多名开发人员进行的调查的结果。 I’ve combed through this big document to bring you the most surprising ins…

web管理

1.站点根目录下查找是否被放置webshell***根据语句判断是不是PHP***脚本# find /storage/www/ -name "*.php" | xargs grep-in --color "eval("# grep -i --include*.php -r system\s*\( /storage/www/2.统计访问日志中来自同ip出现的次数分析盗链、***、机…

MySQL的主从复制云栖社区_MySQL-主从复制

前言前篇说了作为运维在数据库块最起码要会两大技能&#xff0c;今天来说说第二技能--主从复制随着业务的增长&#xff0c;一台数据库服务器以满足不了需求了&#xff0c;负载过重&#xff0c;这时候就需要减压&#xff0c;实现负载均衡读写分离&#xff0c;一主一从或一主多从…

数据存储(SharedPreferences存储)

SharedPreferences是通过 键值对 的方式存储数据SharedPreferences是通过键值对的方式存储的 将数据存储到SharedPreferences中有3种方法&#xff1a;1.Context类中的getSharedPreferences()方法2.Activity类中的getPreferences()方法3.PreferencesManager类中的getDefaultShar…

编程程序的名称要记住吗_学习编程时要记住的5件事

编程程序的名称要记住吗by Kurt由库尔特 学习编程时要记住的5件事 (5 Things to Remember When You’re Learning to Program) Learning to program is challenging. Aside from choosing a language or setting up a development environment that you know nothing about, t…

mysql 数据分析的步骤_数据分析8个主要步骤

# 在对数据进行分析时&#xff0c;主要细分为明确目标、应用思维和如下8个具体步骤&#xff1a;1、读取数据2、清洗数据3、操作数据4、转换数据5、整理数据6、分析数据7、展现数据8、总结报告接下来将介绍使用python来具体处理数据&#xff0c;包括上面几个步骤的实现&#xff…

python学习的一个定位_python学习之——selenium元素定位

web自动化测试按步骤拆分&#xff0c;可以分为四步操作&#xff1a;定位元素&#xff0c;操作元素&#xff0c;获取返回结果&#xff0c;断言(返回结果与期望结果是否一致)&#xff0c;最后自动出测试报告。其中定位元素尤为关键&#xff0c;此篇是使用webdriver通过页面各个元…

Invoker

Invoker 是实体&#xff0c;dubbo外其他对象的转化。转载于:https://www.cnblogs.com/gtaxmjld/p/9786894.html

如何在开源社区贡献代码_如何在15分钟内从浏览器获得您的第一个开源贡献

如何在开源社区贡献代码Matt Mullenweg, founder of Automattic, recently offered this advice to aspiring developers: “Contribute to open source.”Automattic的创始人Matt Mullenweg最近向有抱负的开发人员提供了以下建议 &#xff1a;“ 致力于开源。 ” Mullenweg —…

小心情。

从一开始学习html到现在的nodejs&#xff0c;也有段时间了&#xff0c;那个时候什么都不知道&#xff0c;记得一两年之前还沉迷在一些网络技术的圈子里面&#xff0c;每天看着那些大牛&#xff0c;感觉都很是厉害&#xff0c;每一项技术总是那样的让我着迷&#xff0c;从易语言…