1.冒泡排序
原理:前一个数一次和后面的数比较,如果后面的数大,两个数交换位置
原理图
int[] arr={9,6,7,8,3,5};
for (int i = 0; i < arr.length-1; i++) {
for (int i1 = i+1; i1 < arr.length; i1++) {
System.out.print("arr["+i+"]"+"-"+"arr["+i1+"]"+" ");
}
System.out.println();
}
代码实现:
int[] arr={9,6,7,8,3,5};
print(arr);
for (int i = 0; i < arr.length-1; i++) {
for (int i1 = i+1; i1 < arr.length; i1++) {
if(arr[i]<arr[i1]){
int temp=arr[i];
arr[i]=arr[i1];
arr[i1]=temp;
}
}
}
print(arr);
2.快速排序(效率高)
原理:首先找一个基准数,例:把数组最左边的数作为基准数,然后从右边找比基准数小的数,找到后,记录位置j;在从左边找比基准数大的数,找到后记录位置i;然后arr[i]与arr[j]进行交换,直到i=j,并把次位置的数值与基准数交换,第一轮结束.此时i=j位置的左边是比基准数小的,右边是比基准数大的,然后把两把分成两个数组,分别通过递归进行一开始的方法,排序结束;
原理图:
代码实现:
public static void quickSort2(int[] arr,int left,int right){
if(left>right){
return;
}
//基准数
int base=arr[left];
//从左边i开始;
int i=left;
//从右边j开始;
int j=right;
if(i!=j){
while(arr[j]>=base&&j>i){
j--;
}
while (arr[i]<=base&&i<j){
i++;
}
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
arr[left]=arr[i];
arr[i]=base;
//排左边比基准数小的
quickSort2(arr, left, i-1);
//排右边比基准数大的
quickSort2(arr, j+1, right);
}
3.选择排序
原理:从最左边依次排序,首先记录第一个数为最小值(min),那它和后面所有数比较,找到第一个比最小值小的数,然后互换位置,依次类推
原理图:
代码实现:
//选择排序
public static void changeSort(int[] arr){
for (int i = 0; i < arr.length-1; i++) {
int min=i;
for (int i1 = i+1; i1 < arr.length; i1++) {
if(arr[min]>arr[i1]){
int temp=arr[i1];
arr[i1]=arr[i];
arr[i]=temp;
}
}
}
}
4.插入排序
原理:从第二个数开始找,去比较前一位数的,若比前一位数小,就交换位置,特别注意,插入排序是通过多次交换位置,达成插入的动作,即符合条件的数往前移动到目标位置,目标位置往后移动一位
原理图:
代码实现:
//插入排序
public static void insertSort(int[] arr){
for (int i = 1; i < arr.length; i++) {
for (int i1 = i; i1 > 0; i1--) {
if(arr[i1]<arr[i1-1]){
int temp=arr[i1-1];
arr[i1-1]=arr[i1];
arr[i1]=temp;
}
}
}
}