1、冒泡排序:
冒泡排序思想:1、对相邻的位置的两个元素进行比较,如果前面的元素大于后面的元素,则交换两者的位置;
2、对每一对相邻的元素重复步骤1的操作,从第一对开始一直到结尾的最后一对,这样下来,最后的元素就是最大的;
3、除最后一个元素外,对所有元素重复以上步骤
4、重复上述步骤,直到排序完成
package com.sxt.maopao;
import java.util.Arrays;
/**
* @author YuanFengQiqo
* @date 2019/3/25 11:08
*/
public class Test {
public static void main(String[] args) {
int[] arr={12,6,7,9,45,-9,167,0,11,67,5};
int temp=0;
//最外层的循环是用来判定最后一个元素的位置
for(int i=arr.length-1;i>=0;i--){
//一趟排序所做的事情
for(int j=0;j<i;j++){
if(arr[j]>arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
//输出结果为:[-9, 0, 5, 6, 7, 9, 11, 12, 45, 67, 167]
冒泡排序的时间复杂度 :最好的情况下是O(n),最差的情况下是O(n^2)。
冒泡排序的优点是:代码简单,稳定
2、选择排序
1、在未排序的序列中找到一个最小的元素,将该元素放到序列的起始位置
2、再从剩余的未排序的元素中找到一个最小的元素放到已排序的元素的末尾
3、重复第2步,直到排序完成
代码如下:
|
时间复杂度为:O(n^2)
3、直接插入排序
插入排序思想:将n个待排元素看成一个有序表和一个无序表,最开始时有序表只有一个元素,无序表有n-1个元素,排序过程中从无序表中挑出1个元素放到有序表中适当的位置,使之成为新的有序表,进过n-1次可以完成排序过程。具体步骤如下:
1、从第一个元素开始,可以认定该元素已经排好序了
2、取出下一个元素,对已经排好序的元素进行从后到前扫描
3、如果该元素(排好序)大于新元素,则将该元素移动到下一个位置
4、重复步骤3,直到在已排好序的元素中找到小于或等于新元素的位置
5、将新元素插入该位置
6、重复步骤2-5,直到排序完成
具体代码如下:
4、快速排序
快速排序是8答排序算法中最重要的算法之一,时间复杂度是O(nlog2n),快速排序的思想如下:1、从序列找出一个元素作为基准值;2、分区:将比基准值小的元素都放在基准值左边,比基准值大的都放在基准值的右边,和基准值相等的放在任何一边都可以;3、递归:对左右子序列分别按照步骤2进行递归,直到各区间的元素仅有一个值。具体代码如下:
|