- A+
排序
冒泡排序:是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
1. 比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。
2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
3. 针对所有的元素重复以上的步骤,除了最后一个。
4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
代码如下:
选择排序:
快速排序:
步骤为:
1. 从数列中挑出一个元素,称为"基准",
2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区操作。
3. 递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。
将一个数组的一个元素作为基准、选定两个指针 low和high,先让high从向前移动,在high>low的前提下,如果high对应的元素小于基准元素,则把high对应的元素移动到low的位置
然后把low右移,如果low对应的元素比midValue大,把low的对应的元素赋给high的位置,如此循环,到low与high重合时退出,再midValue的左右排序
快速排序时要理解在有函数递归调用:
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕
代码如下:
插入排序:把序列的左边第一个元素作为有序序列,从右边的无序元素,从左到右依次与左侧的有序元素比较,找到相应位置,有序序列的元素向后移动,为该元素提供空间。
希尔排序:将数组列在一个表中并对列分别进行插入排序,重复这过程,不过每次用更长的列(步长更长了,列数更少了)来进行。最后整个表就只有一列了。将数组转换至表是为了更好地理解这算法,算法本身还是使用数组进行排序。
希尔排序与插入排序相似,只是在步长上有了变化
快速排序:
步骤为:
1. 从数列中挑出一个元素,称为"基准",
2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区操作。
3. 递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。
将一个数组的一个元素作为基准、选定两个指针 low和high,先让high从向前移动,在high>low的前提下,如果high对应的元素小于基准元素,则把high对应的元素移动到low的位置
然后把low右移,如果low对应的元素比midValue大,把low的对应的元素赋给high的位置,如此循环,到low与high重合时退出,再midValue的左右排序
并归排序
将数组列在一个表中并对列分别进行插入排序,重复这过程,不过每次用更长的列(步长更长了,列数更少了)来进行。最后整个表就只有一列了。将数组转换至表是为了更好地理解这算法,算法本身还是使用数组进行排序。
这里主要写的是代码和算法思路,如果不理解的可以到csdn上搜索《白话经典算法系列》,部分图片来自网络