最近在复习corejava基础,又有些遗忘了,突然想起用博客来记录一下,回来一看,离上次更新刚好已经过了两个月了…
写一下三大基础的排序吧~以后学到了其他五大排序再接着这篇文章来更新。
一:冒泡排序
冒泡排序的基本思想就是两个数之间相互比较互换,通过一系列的比较排序,通过交换,数组里面的元素就会按照降序/升序进行排序操作。
代码实现如下:
import java.util.Arrays;
public class Test{
public static void main(String[] args) {
Test x = new Test();
int[] arr = {3,9,5,8,4,6,1,7};
x.bubbleSort(arr);
System.out.println(Arrays.toString(arr));
}
public void bubbleSort(int[] arr) {
for(int i = 0;i < arr.length-1;i++) {
for(int j = 0;j < arr.length-i-1;j++) {
if(arr[j] > arr[j+1]){
arr[j] = arr[j] ^ arr[j+1];
arr[j+1] = arr[j+1] ^ arr[j];
arr[j] = arr[j] ^ arr[j+1];
}
}
}
}
}
二:选择排序
选择排序的基本思想是在数组中将最小的元素或最大的元素挨个依次拿出来排序,通过n次的比较取出后,就可以得到排序的结果。
int[] arr = {3,9,5,8,4,6,1,7};
第一轮排序:把1通过比较把1取出来和第一个元素位置互换
1,9,5,8,4,6,3,7
第二轮排序:剩下的元素中,3为最小数,所以把3取出与第二个元素互换
1,3,5,8,4,6,9,7
依次类推>>>
第三轮排序:1,3,4,8,5,6,9,7
第四轮排序:1,3,4,5,8,6,9,7
第五轮排序:1,3,4,5,6,8,9,7
第六轮排序:1,3,4,5,6,7,9,8
第七轮排序:1,3.4,5,6,7,8,9
代码实现如下:
import java.util.Arrays;
public class Test1 {
public static void main(String[] args) {
Test1 x = new Test1();
int[] arr = {3,9,5,8,4,6,1,7};
x.choiceSort(arr);
System.out.println(Arrays.toString(arr));
}
public void choiceSort(int[] arr) {
for(int i = 0;i < arr.length-1;i++) {
//记录下标位置
int index = i;
int now = i;
//如果小于比较的第一个值,则把下标换为它
for(int j = i+1;j < arr.length;j++) {
if(arr[index] > arr[j]) {
index = j;
}
}
//如果上面的index变了,那么说明进行了互换,则index现在的值为所有数中的最小值的下标,把两个值的下标互换
if(index != now) {
System.out.print(index+"/"+now+ " ");
arr[index] = arr[index] ^ arr[now];
arr[now] = arr[index] ^ arr[now];
arr[index] = arr[index] ^ arr[now];
}
}
}
}
三:插入排序:
插入排序的基本思想为将数组的值分为两个区域,一个插入好的区域,一个待插入的区域。
int[] arr = {3,9,5,8,4,6,1,7};
|3,9,5,8,4,6,1,7 |左边为插入好的区域,右边为待插入区域,将右边的待插入区域跟左边的元素值大小作比较,在合适的地方进行插入操作。
比如通过插入排序来排好arr数组中的元素
第一轮插入排序:3|9,5,8,4,6,1,7
第二轮插入排序:3,9|5,8,4,6,1,7
第三轮插入排序:3,5,9|8,4,6,1,7
第四轮插入排序:3,5,8,9|4,6,1,7
第五轮插入排序:3,4,5,8,9|6,1,7
第六轮插入排序:3,4,5,6,8,9|1,7
第七轮插入排序:1,3,4,5,6,8,9|7
第八轮插入排序:1,3,4,5,6,7,8,9|
代码如下:
import java.util.Arrays;
public class Test2 {
public static void main(String[] args) {
Test2 x = new Test2();
int[] arr = {3,9,5,8,4,6,1,7};
x.insertSort(arr);
System.out.println(Arrays.toString(arr));
}
public void insertSort(int[] arr) {
for(int i = 0;i < arr.length;i++) {
//记录下标位置以及下标值
int index = i;
int now = arr[i];
for(int j= i-1;j >= 0;j--) {
//如果小于就把当前元素位置往后推一位,通过记录下标位置
if(now < arr[j]) {
arr[j+1] = arr[j];
index = j;
}
else {
break;
}
//如果发生了互换,就把位置的下标值给它
if(index != i) {
arr[index] = now;
}
}
}
}
}