在算法中有八种基本排序,即冒泡排序;选择排序;插入排序;希尔排序;归并排序;快速排序;基数排序;堆排序;计数排序;桶排序。排序算法又可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。
常见的内部排序算法有:冒泡排序、选择排序、交换排序、插入排序、希尔排序、快速排序、归并排序、桶式排序、基数排序等,其中最常用的是计数排序,选择排序,冒泡排序,插入排序和快速排序
排序算法的稳定性:若两个记录A,B的关键字值相等,但排序后A,B的先后次序保持不变,则成这种排序算法是稳定的。
冒泡排序
1.冒泡排序的基本实现思想:通过对待排序的序列从前往后依次比较相邻元素的排序码,若发现逆序则交换,使排序码较大的元素逐渐从前部移动到后部
2.注意事项:因为排序的过程中,各元素逐渐接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此在排序过程中设置一个标志swap判断元素是否进行过交换,从而可以避免不必要的重复比较。
3.结束条件:在任何一趟进行过程中未出现交换。
4.代码实现:

快速排序
1.快速排序的实现思想:确认列表第一个数据为中间值,第一个值看成空缺(低指针空缺),然后在剩下的队列中,看成有左右两个指针(高低)。开始高指针向左移动,如果遇到小于中间值的数据,则将这个数据赋值到低指针空缺,并且将高指针的数据看成空缺值(高指针空缺)。然后先向右移动一下低指针,并且切换低指针移动。当低指针移动到大于中间值的时候,赋值到高指针空缺的地方。然后先高指针向左移动,并且切换高指针移动。重复上两步操作。直到高指针和低指针相等时退出,并且将中间值赋值给对应指针位置,然后将中间值的左右两边看成行的列表,进行快速排序操作。
2.注意事项:需要定义的变量较多,最好做到见名知意。
3.代码实现:



选择排序
1.选择排序的实现思想:将第一个值看成最小值,然后和后续的比较找出最小值和下标,交换本次遍历的起始值和最小值
2.说明:每次遍历的时候,将前面找出的最小值,看成一个有序的列表,后面的看成无序的列表,然后每次遍历无序列表找出最小值。
3.代码实现:

插入排序
1.插入排序的实现思想:默认从第二个数据开始比较。如果第二个数据比第一个小,则交换。然后在用第三个数据比较,如果比前面小,则插入(狡猾)。否则,退出循环说明:默认将第一数据看成有序列表,后面无序的列表循环每一个数据,如果比前面的数据小则插入(交换)。否则退出。
2.代码实现

希尔排序
1.希尔排序的实现思想:、基本上和插入排序一样的道理,不一样的地方在于,每次循环的步长,通过减半的方式来实现
2.说明:基本原理和插入排序类似,不一样的地方在于。通过间隔多个数据来进行插入排序。
3.代码实现

归并排序
1.归并排序的实现思想:将列表按照对等的方式进行拆分,拆分小最小快的时候,在将最小块按照原来的拆分,进行合并,合并的时候,通过左右两块的左边开始比较大小。小的数据放入新的块中
2.说明:简单一点就是先对半拆成最小单位,然后将两半数据合并成一个有序的列表。
3.代码实现


网友评论