常用的内部排序

 “排序,又是排序!’小江望着面试题上一道关于快速排序的试题发休。
    虽然上大学时学过各种常见的排序算法,但要知道大学老师照着书上念得多,动手写代码的少,考试也就是背背概念就行了。因此,小江虽然对快速排序的概念、理论算是比较熟悉,但真要自己动手写,依然毫无头绪。.
    “不知道怎么搞的.怎么现在的公司笔试动不动就考排序算法,不是快速排序,就是Shell排序,好像实际开发时也很少需要自己实现排序的啊?”面试失败的晚上,小江无比侦感地在MSN上向以前的同学诉苦。
    “很正常啊,很多大型的软件公司都喜欢考排序的。我进公司时还考了归并排序呢。.同学不仅没有安慰小江,反而站在公司一边.
    “啊?实际开发中不太需要自己实现排序吧?”小江问。
    “公司面试考排序可能有两个考虑吧,1.排序算法是程序员非常重要的基本功之一2.即使在实际编程中,我们也可能需要自己实现排序,比如进行JavaScript编程时一你别把自己局限在Java里啊。”
    “那看来还是得好好学习一下经典的排序算法啦?”小江感慨。
    “嗯,而且学习这些经典排序对培养编程思维也有很好的帮助呢。”小江的同学继续介绍。
    看到自己的同学也这样劝说,小江下定决心要重新系统地学习各种经典的排序算法。
.排序的介绍
  排序是将一群数据,依指定的顺序进行排列的过程.
  排序的分类:
  ①内部排序:
  指将需要处理的所有数据都加载到内部存储器中进行排序.包括(                                                交换式排序法、选择式排序法插入式排序法): (就是加载到内存中排序
  ②外部排序法
数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。包括(合并排序法直接合并排序法).(为什么存在?假设给你一万个数据,你是不可能一下子排好,但是他就是要你排好,这个时候看上面↑)
  排序(Sorting)是数据处理中一种很重要的运算,同时也是很常用的运算,一般数据处理工作25%的时间都在进行排序.简单地说,排序就是把一组记录(元素)按照某个域的值的递增(即由小到大)或递减(即由大到小)的次序重新排列的过程。
常用的内部排序_第1张图片
.交换式排序法
                            
  交换式排序属于内部排序法,是运用数据值比较后,依判断规则对数据位置进行交换,以达到排序的目的.
  交换式排序法又可分为两种:
  1.冒泡排序法(Bubble sort)
  2.快速排序法(Quick sort)(500万数据,两三秒就排完了)

.交换式排序法一冒泡排序法
  冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从后向前(从下标较大的元素开始).依次比较相邻元素的排序码,若发现逆序则交换,使排序码较小的元素逐渐从后部移向前部(从下标较大的单元移向下标较小的单元),就象水底下的气泡一样逐渐向上冒。
  因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中
设计一个标志flag判断元素是否进行过交换.从而减少不必要的比较。
下图演示了一个冒泡的图:常用的内部排序_第2张图片
常用的内部排序_第3张图片
.选择式排序法一选择排序法
                      
  选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,经过和其他元素重整,再依原则交换
位置后达到排序的目的.
选择式排序又可分为两种:
一选择排序法(Selection Sort)
2.堆排序法(Heap Sort)
.选择式排序法一选择排序法
  选择排序(select sorting)也是一种简单的排序方法.它的基本思想是:第一次从R[0]一 R[n-1]中选取最小值,与R[0]交换,第二次从R[1] R[n-1]中选取最小值,与R[1]交换,第三次从R[2]一 R [n-1]中选取最小值,与R [2]交换,…,第i次从R[i-1]一 R[n-1]中选取最小值,与R [ i-1]交换,...,第n-1次从R [n-2]一 R [n-1]中选取最小值,与R [n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列.
  例如,给定nab,数组R中的8个元素的排序码为:( 8, 3, 2, 1, 7,4. 6. 5)。
选择排序过程如图所示:
常用的内部排序_第4张图片

你可能感兴趣的:(JavaScript,编程,算法,面试,存储,sorting)