排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或 递减的排列起来的操作。
一、冒泡排序
从第一个元素开始,每次比较相邻元素,如果元素顺序不正确,则进行交换,否则,比较下一对相邻元素。重复上述过程,直到所有元素都有序。
冒泡排序每次都可以将一个最值排到队尾,像水里冒泡泡一样,大的先浮上来,所以叫冒泡排序。
二、选择排序
选择数组最小的元素,与数组第一个元素交换,然后选择剩余的数组元素中最小的元素,与数组第二个元素交换,一直重复上述操作,直到数组有序。
选出第一小的与第一位交换,选出第二小的与第二位交换,直到全部有序。
三、快速排序
先选一个元素作为基点,将其余元素比基点小的放左边,比基点大的放右边,然后分别对左边和右边重复以上操作,直到所有元素有序。
四、归并排序
假设初始序列含有n个记录,则可看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到[n/2]个长度为2或1的有序子序列,再两两归并,如此重复,直到得到一个长度为n的有序序列为止。
五、堆排序
以从小到大排序为例,先建立大顶堆,然后取出堆顶元素(堆顶元素一定是当前堆中的最大值),将堆的最后一个元素放置到堆顶。这时,并不是一个大顶堆,然后调整堆使其成为大顶堆,然后将堆顶元素取出,重复上述过程,直到最后一个元素。
六、直接插入排序
假设元素存储在数组 g 中,共有 n 个元素,依次遍历每一个元素,将元素 g[i] 按大小顺序插入到 0 ~ i 的位置。一直重复插入,直到第n个元素。
将第一个元素看作有序表,遍历2~n号元素,依次插入已构成的有序表的恰当位置,使之成为新的有序表。
七、希尔排序
通过设置一个增量n,大小为数组长度的一半,将间隔为n的元素视作一个组,然后对每个组内部的元素进行插入排序,然后再将增量n缩小为一半,再次进行分组插入排序,直到增量为1,即所有元素有序。
希尔排序是插入排序的改进版本,弥补了插入排序在某些情况下的缺点。
八、基数排序
按照数字的位数进行排序,即:先排个位,再排十位,再排百位……。有10个桶,标号为0~9。排序个位时,按照个位值的不同,分配到10个桶中(0分配到0号桶,1分配到1号桶,以此类推),然后将分配后的结果收集,这时候数组是按照个位排序的。继续按照十位重复上述排序过程,一直排序完所有的位数(取决于数组中最大数的位数)。