数组排序:把一个无序数组,调整元素位置,最终得到一个有序的数组
时间复杂度:衡量算法的执行效率
空间复杂度:算法在执行过程中使用内存空间
稳定性:排序前后,相同的值顺序会不会交换
冒泡排序:
思想:相邻的元素进行比较,如果前面的元素大于后面的元素,交换位置
public class Demo13 {
public static void main(String[] args) {
int[] arr = {43,56,74,5,46,45,78,78} ;
//冒泡排序
for (int j = 0;j<arr.length-1;j++) {
for (int i = 0; i < arr.length - 1 - j; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
}
for (int i : arr) {
System.out.println(i);
}
}
}
选择排序 :
思想:先从数组中找到最大值,放到末尾,再从剩下的元素中找到最大值,放到剩下元素的末尾
//选择排序
public class Demo14 {
public static void main(String[] args) {
int[] arr = {43,56,74,5,46,45,78,78};
for (int j=0;j<arr.length-1;j++) {
//最大值的下标
int maxIndex = 0;
for (int i = 1; i < arr.length-j; i++) {
if (arr[i] > arr[maxIndex]) {
maxIndex = i;
}
}
//将最大的与尾部交换
int temp = arr[maxIndex];
arr[maxIndex] = arr[arr.length - 1-j];
arr[arr.length-1-j] = temp;
}
for (int i :arr
) {
System.out.println(i);
}
}
}
插入排序:
思想:先把第一个元素看做是一个有序数组,然后将第二个元素加入数组中,找到合适的位置形成新的有序的数组
//插入排序
public class Demo15 {
public static void main(String[] args) {
int[] arr = {43,56,74,5,46,45,78,78};
for (int j = 1; j<arr.length;j++) {
int i = j;
int target = arr[i];
while (i>0 && target < arr[i - 1]) {
arr[i] = arr[i - 1];
i--;
}
arr[i] = target;
}
}
}
快速排序:
思想:先选定数组中的第一个元素作为一个标准
将所有比它小的元素,放到前面,所有比它大的元素放到后面
将前后两个部分,分别进行快速排序