`
十三月的
  • 浏览: 168067 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

5种基本排序 娱乐版开脑解析

阅读更多

假设有那么一群富豪,需要将他们的资产排名。(从少到多)
以下9个想法,分别代表一种排序逻辑。
想法1:
最普通的的想法是除了富豪们之外,有个助理一趟一趟的找,每趟找最富的,出列。----直接选择排序
想法2 想法1改进一点点
想法1中,每趟找的时候,你都得做比较,这个避免不了,但是你不能白比较啊,比较了的话你可以让比较的俩人交换位置,这样起码部分人已经排好序了,进一步就可以整个标志,记录你这趟比较是否交换位置,如果没交换说明已经排好了,这算是一定程度上利用了你做比较,防止浪费精力啊。----冒泡排序。
想法3:
还有一个很正常的想法是,不用助理,就让富豪们中间的一个人(假如排在第一个的),喊一声谁的钱少于1000万的站在我的左边,大于1000万的站在我右边。(这个富豪就是有1000万),排好后,这个人就不动了,两边的人再分别找第一个人喊,直到排玩。---快速排序
想法4
你也可以这样,先让第一个出列,再让第二个出列,肯定先和第一个出列的比较下看排在哪,接着让第三个出列,再先和当前排第二的比,比他钱多的话,就站他后面否则跟第一个比较。依次类推。---直接插入排序
想法5:想法4再改进一点点
想法4中有的时候还可以更快点,就是利用有序数列的特点进行二分查找。假如已经排了7个,第8个人出列了,他可以先和前7已经排好的中间的那个人开始比,即第3个人,比他有钱的话再从他后边的4个人的中间的那个人比较。直到找到正确的位置。--折半插入排序(二分插入排序)
想法6想法5再改进一点点(字挺多,但是逻辑很简单)
其实对于插入排序的话,如果最初始的队伍比较有序的话,对于接下来的排序肯定有好处的,极端情况下是本来就是排好的,第一出列了,第二出列和第一比较直接插在后面,第三出列和第二比较直接插在后边….假如有一两个没排好,排的话依然很快。所以可以想个办法让队伍再进行最后一次直接插入排序之前队伍有序一些。但是又不能花费太大(主要还是利用直接插入,想的这个办法只是起到辅助作用),所以先有个间隔gap,让第1和第6先比较,第2和第7比较
这样他们间隔挺大的,每个子序列只有2个人比较,会很快,然后缩小gap,让147比较,这样每次子序列的人多了,但是gap量少了,比较还是比较快的,当然gap选取很重要啦,需要智慧的。---希尔排序
想法7
你还可以这样想,两个人,两个人组成组,你们内部先比较,比较完之后,再和别的组比较,这个逻辑很普通,就像我们tao.哥如果想统计全国哪个县长最有money,肯定显示交给各个省长,各个省长交给市长,各个市内部先比较,再往上交个省。省里在比较各个市的最多的….这就是归并排序。当然不同两个市里的县长还是要比较的。这样其实是有好处的,毕竟每个市还是比较小的,比较的很快,同时能保证全国这样一个队伍中,这一部分是有序的。效率可想而知,相对还是比较不错的,因为生活中到处再用(适者生存)!!
想法8
这个思维的跨度有点大,堆排序是选择排序的一种,直接选择是普通人最正常的想法,但是又是很笨的。


可以想像人站成这种形状(完全二叉树)。第一步,5097交换位置,第二步,(132765)这3个人找出最小的放在现在65的地方,显然13会代替65,之后是(385076)这3个人,如果此时50是最小的(假如3899代替)那么50上去之后,对(5097)这两个人有影响的,需要将换下来的9997再调整。这个过程叫做建堆,这个堆特殊点,父节点都比孩子节点大,但是左右孩子节点没特殊要求。每次从堆顶取出最小的,让最后的一个补上去,此时会再调整堆。但是这个时候调整的话就是沿着某一条线走下去,如(49389750)这条线或者是(493876)有点二分查找的味道。
想法9
其实不同的事情,排序肯定依照情况而定。上述方法有限,举个最常见的例子,假如想将扑克牌排序,黑>>>方,1>K>Q…
这个时候,上述排序好像不太好用,常见办法先是分成4组,黑、红、梅、方。再利用上面的排序方法排序,这个是基数排序的一种。
纠结了几天,终于写完了。睡觉。(自己写的java代码见附件)

(上次传的代码快排中有一点小问题,抱歉,已经修改,重新上传了)
  • 大小: 16.2 KB
  • 大小: 7.1 KB
13
10
分享到:
评论
13 楼 rmn190 2012-03-30  
很亲切, 我也想过给Hibernate框架里的每一个类编一角色, 并以此导演故事, 不过,因为太复杂没进行下去。
12 楼 十三月的 2012-03-29  
akon405 写道
lz很有创意嘛,这样的学习方式就是轻松加愉快。

有创意不敢当啊,平时就这样学,有时候想搞的通俗,理解深一些花的时间和精力就多点,进度可能慢.轻松加愉快,这个词很给力啊
11 楼 akon405 2012-03-29  
lz很有创意嘛,这样的学习方式就是轻松加愉快。
10 楼 十三月的 2012-03-29  
有个问题谁帮忙解答下,为什么有人留言了最近访问记录却没有他呢?
9 楼 十三月的 2012-03-29  
java_age 写道
哈哈,不错。学习到了
不过LZ,直接选择排序貌似有问题。
交换的时候问什么要加这个判断
//交换
if(i!=k){
int tmp=data[k];
data[k]=data[data.length-1-i];
data[data.length-1-i]=tmp;
}

int data[] = {9,1,3,6,5};

你试试。

这个可以不要,当初是基于这样的考虑:如果遍历到第i次应该方的位置是data.length-1-i,如果相等就不用交换位置了。判断条件是data.length-1-i)!=k 你觉的呢
8 楼 java_age 2012-03-29  
哈哈,不错。学习到了
不过LZ,直接选择排序貌似有问题。
交换的时候问什么要加这个判断
//交换
if(i!=k){
int tmp=data[k];
data[k]=data[data.length-1-i];
data[data.length-1-i]=tmp;
}

int data[] = {9,1,3,6,5};

你试试。
7 楼 SoCoolMan 2012-03-28  
给力 再学习学习
6 楼 十三月的 2012-03-28  
guxinglei5920 写道
不错 不错!  有意思...

过奖过奖 通俗些...
5 楼 十三月的 2012-03-28  
345,7,32,5,4,3,12,23,110,7
jdkleo 写道
哥们,快速排序算法是错的,给你一组值,你测下:
int[] a = {345,7,32,5,4,3,12,23,110,7};

哦 代码中的1改为0
    // 递归
     if (position >= 0) {
      quicSort(data, start, position - 1);
      quicSort(data, position + 1, end);
}

position>=1改为position>=0,抱歉啊,当时看见后面的参数position-1,测试数据时候没有测到一种情况是:确定的position之后,position左边没数,全在右边,这个时候就没能再递归...谢谢了
4 楼 jdkleo 2012-03-28  
哥们,快速排序算法是错的,给你一组值,你测下:
int[] a = {345,7,32,5,4,3,12,23,110,7};
3 楼 guxinglei5920 2012-03-28  
不错 不错!  有意思...
2 楼 十三月的 2012-03-28  
郭广川 写道
少年给力呀,顶个

必须的!!
1 楼 郭广川 2012-03-28  
少年给力呀,顶个

相关推荐

    六中排序方法的解析与比较

    在这个主题中,我们将探讨六种常见的排序方法,并对它们进行解析和比较。排序的主要目标是将无序的数据序列转换为有序的数据序列,这在数据分析、数据库管理、算法设计等多个领域都有着广泛的应用。 1. **冒泡排序*...

    小学语文句子排序练习题集附答案解析整理版.doc

    小学语文句子排序练习题集附答案解析整理版.doc

    排序算法排序算法排序算法排序算法

    在计算机领域,排序算法是用来组织和整理数据的一种方法,它的目的是将一组无序的数据按照特定的顺序排列。排序算法的效率直接影响到程序的运行时间和资源消耗,因此,理解和掌握各种排序算法对于编程人员来说至关...

    精通八大排序算法

    以下是这八大排序算法的详细解析: 1. **快速排序**(Quick Sort): 快速排序由C.A.R. Hoare在1960年提出,是一种高效的分治算法。它的基本思想是选取一个基准元素,将数组分为两部分,一部分的所有元素都比基准...

    数据结构--内部排序

    本文将深入探讨标题"数据结构--内部排序"中涉及的几种主要排序算法,并对描述中提及的插入排序、Shell排序、冒泡排序、快速排序、简单选择排序以及堆排序进行详细解析。 1. 插入排序:插入排序是一种简单的排序算法...

    数据结构习题与解析(C语言版)

    清华大学出版社出版的《数据结构习题与解析(C语言版)》是由李春葆编著的一本数据结构学习参考书。本书按照数据结构课程的教学大纲要求编写,提供了作者多年教学经验的积累,系统地整理了相关知识和题解。 全书共...

    5种java排序算法汇总工具类

    本文将详细解析Java中的五种常见排序算法:快速排序、希尔排序、插入排序、堆排序以及归并排序,并通过一个工具类的形式展示它们的实现。 1. **插入排序(Insertion Sort)** 插入排序是一种简单的排序算法,它的...

    兖州事业编招聘2020年考试真题及答案解析网友整理版.docx

    标题和描述提及的文件是“兖州事业编招聘2020年考试真题及答案解析网友整理版”,这表明这是一个关于2020年兖州地区事业单位招聘考试的真题集,包含了考生或网友整理的答案和解析。 【标签解析】 标签“考试”说明...

    C# 排序算法(冒泡、快速等等)

    本文将详细解析C#中常见的几种排序算法,包括冒泡排序、快速排序、插入排序、基数排序、堆排序、选择排序以及希尔排序。 1. 冒泡排序:冒泡排序是最简单的排序算法之一,它通过重复遍历数组,比较相邻元素并交换...

    共和2017年事业编招聘考试真题及答案解析网友整理版.docx

    【共和2017年事业编招聘考试真题及答案解析网友整理版】 这份文档包含了2017年共和地区的事业单位招聘考试的真题及答案解析,主要涉及的知识点涵盖多个领域,包括逻辑推理、文史知识、生物科学、语言理解等。 1. ...

    java中各种排序方法的实现源码

    插入排序是一种简单直观的排序算法,它的工作原理类似于我们日常整理扑克牌的过程。对于未排序序列中的每个元素,都会将其与已排序序列中的元素依次比较,找到合适的位置插入。插入排序在最佳情况(即输入数组已经...

    杨凌2019年事业编招聘考试真题及答案解析整理版.docx

    【杨凌2019年事业编招聘考试真题及答案解析整理版】 这份文档是针对杨凌地区2019年度事业单位招聘考试的一份复习资料,包含了真题及答案解析,旨在帮助考生备考。考试内容可能涉及多个领域,如管理、法律、医学知识...

    排序算法

    本文将深入探讨几种常见的排序算法,并通过源码解析来帮助理解其工作原理。 首先,我们从最基本的排序算法开始,**冒泡排序**。冒泡排序是一种简单的交换排序,它重复地遍历待排序的数列,一次比较两个元素,如果...

    志丹2016年事业编招聘考试真题及答案解析网友整理版.docx

    - **解析**: 自我防御性归因是指个体倾向于将成功归因于自身努力,而将失败归咎于外界因素的一种心理倾向。题干中提供的选项中,“某企业因经营不善而面临破产,该企业领导承认企业领导班子在经营决策上存在失误”...

    实用C排序方法

    根据给定的信息,本文将详细介绍两种实用的C语言排序方法:冒泡排序和快速排序,并简要提及选择排序与插入排序、希尔排序等其他几种排序算法。这些算法在实际编程中有着广泛的应用。 ### 冒泡排序 冒泡排序是一种...

    常山2016年事业编招聘考试真题及答案解析整理版.docx

    标题和描述均指向同一个文件,即"常山2016年事业编招聘考试真题及答案解析整理版.docx",这表明该文档包含的是常山地区2016年事业单位招聘考试的真题及官方提供的答案解析,可能是一个备考资料或考后复习材料。...

    数据结构与算法经典问题解析 Java语言描述(英文第六版+中文第二版)

    这些算法在实际编程中有着广泛的应用,比如排序用于整理数据,查找用于定位信息,图算法用于网络路径规划,动态规划则常用于解决资源分配和优化问题。 此外,书中很可能还涉及了数据结构和算法的复杂度分析,包括...

    新郑2020年事业编招聘考试真题及答案解析网友整理版.docx

    因此,正确的排序应该是 **5—4—1—3—2**,但是根据给定的选项,最接近的答案是 **5—4—1—2—3**。因此,本题正确答案是 **选项二**。 #### 题目示例2: 题目描述了一款价格昂贵的激光捕鼠器,尽管产品质量优秀...

    明光事业编招聘2016年考试真题及答案解析网友整理版.docx

    【标题】和【描述】提及的是“明光事业编招聘2016年考试真题及答案解析网友整理版”,这是一份文档,包含了2016年明光市事业单位招聘考试的真题和答案解析,由网友整理分享。这个文档可能对备考者有所帮助,可以了解...

Global site tag (gtag.js) - Google Analytics