排序算法
十大内部排序算法
- 选择排序
直接选择排序、堆排序 - 交换排序
冒泡排序、快速排序 - 插入排序
直接插入排序、折半插入排序、Shell排序 - 归并排序
- 桶式排序
- 基数排序
今天说的就是最常使用的四种排序方式,冒泡,快速,插入,选择
冒泡排序
排序思想:
- 比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步 做完后,最后的元素会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要 比较为止。
具体实现
//算法核心
public static void bubblesort(int arr[]) {
for(int i =arr.length-1;i > 0;i--) {
//需要进行length次比较
for(int j = 0;j < i;j++) {
//每i次的比较个数都要-1,因为最后一个在上一次的交换完成后已经最大,无需再加入比较
if(arr[j] > arr[j+1]) {
//交换两个相邻元素的值
change(arr,j,j+1);
}
}
}
}
快速排序
排序思想:
- 从数列中挑出一个元素,称为"基准"(pivot),
- 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准 值大的摆在基准的后面(相同的数可以到任一边)。在这个分区结束之后, 该基准就处于数列的中间位置。这个称为分区(partition)操作。
- 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数 列排序。
- 递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好 了。虽然一直递归下去,