选择排序
原理:
找到最小值的索引,然后和第一个数据进行交换。再找除了第一个数据意外的最小值的索引,然后和第二个数据进行交换,一次类推
- 先交换下标,再交换数据
案例:
int[] arr = {3,4,2,1,5};
for(int i = 0;i < arr.lenght - 1 ; i++){//遍历轮数,
int index = i; 每轮遍历数组开始的地方
for(int j = i ; j< arr.length; j++){//遍历数据找到最小值的索引下标
if(arr[index] > arr[j]){
index = j;
}
}
int temp ;
temp = arr[i];
arr[i] = arr[index];
arr[index] temp;
}
System.out.print(Arrays.toString(arr));
冒泡排序
原理:
比较两个相邻的元素,如果左边的比右边大,则两个元素交换位置,否则,则不变
案例:
int[] arr = {3,2,5,7,6,4,8,1};
for(int i = 0 ; i < arr.length - 1 ; i++){//遍历的是轮数,需要比较几轮
for(int j = 0; j < arr.length - 1 -i ; j++){//遍历数组中的数据元素
if(arr[j] > arr[j +1]){//如果左边的数据比右边的大,则两个数据交换位置
int temp = arr [j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
System.out.print(Arrays.toString( arr));
选择排序和冒泡排序 的去区别:
1.冒泡排序是比较相邻位置的两个数,而选择排序是按顺序比较,找最大值或者最小值;
2.冒泡排序每一轮比较后,位置不对都需要换位置,选择排序每一轮比较都只需要换一次位置;
3.冒泡排序是通过数去找位置,选择排序是给定位置去找数;
冒泡排序优缺点:
优点:比较简单,空间复杂度较低,是稳定的;
缺点:时间复杂度太高,效率慢;
选择排序优缺点:
优点:一轮比较只需要换一次位置;
缺点:效率慢,不稳定