// 以下都以从小到大的写法
1.冒泡排序
原理: 将相邻左右两个元素依次比较大小,不符合条件就交换位置
for(int i = 0; i < arr.length ; i++){ //进行的轮数
for(int j = 0; j < arr.length - 1; j++){
if(arr[j] > arr[j+1]){ //前后比较,大的数交换到后边去
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
2.选择排序
原理:找到数组中最小的元素将其放到第一位,找到第二小的元素将其放到第二位,以此类推
for(int i = 0; i < arr.length; i++){
int min = i; //保存最小数的下标
for(int j = i ; j < arr.length; j++){
if(arr[j] < arr[min]){ //将最小值下标保存到min
min = j;
}
}
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp; //将最小值放到指定位置
}
3.插入排序
原理:将第一个元素视为有序数列,后边的元素依次从后向前进行比较并插入指定位置
for(int i = 1; i < arr.length ; i++){ //从第二个元素开始插入
for(int j = i ; j > 0; j--){
if(arr[j] < arr[j-1]){
int temp =arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
}
}
}
4.快速排序
原理: 将第一个元素视为基准数,将比基准数大的数放在基准数右边,比基准数小的数放在基准数
左边,然后以基准数为中心,对其左右两边的数列依次进行此操作
public static void quickSort(int arr[],int left, int right){
if(left >= right){ ///递归停止的条件
return;
}
int i = left;
int j = right; //定义i,j指向开头结尾
int temp = arr[left]; //保存基准数
while( i < j){
while( arr[j] >= temp && i < j){ //一定是j先开始从后向前找比基准小的数
j--;
}
while( arr[i] <= temp && i < j){ //j就位后i出发从前向后找比基准大的数
i++;
}
if( i < j){ //交换
int temp =arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
arr[left] = arr[i];
arr[i] = temp; //基准数归位
//此时第一轮结束
//开始递归
quickSort(arr, left , j-1); //左边
quickSort(arr, j +1, right); //右边
}