冒泡&快速排序
package sort;
import java.util.Arrays;
/**
-
@Description 选择&冒泡&快速排序
-
@Author haifeng.cao
-
@Date 2022/3/29 18:27
*/
public class BubblingSort {public static void main(String[] args) {
int dataA[] = new int[]{ 2,12,4,6,78,45,0,5};
//选择排序
dataA = selectionSort(dataA); //冒泡排序
System.out.println("选择排序: "+Arrays.toString(dataA));int dataB[] = new int[]{ 2,12,4,6,78,45,0,5}; dataB = bubblingSort(dataB); //冒泡排序 System.out.println("冒泡排序: "+Arrays.toString(dataB)); int dataC[] = new int[]{ 2,12,4,6,78,45,0,5}; fastSort(dataC,0,dataC.length - 1); //快速排序 (递归) System.out.println("快速排序: "+Arrays.toString(dataC));
}
/**
- @Description 选择排序
- @Author haifeng.cao
- @Date 2022/3/29 18:52
- @params [data]
- @return int[]
*/
public static int[] selectionSort(int data[]) {
//从左到右按照小到大进行
for (int i = 0; i < data.length; i++) {
for (int j = i+1; j < data.length; j++) {
if(data[i] > data[j]){ //交换位置
data[i] = data[i] + data[j];
data[j] = data[i] - data[j];
data[i] = data[i] - data[j];
}
}
}
return data;
}
/**
- @Description 冒泡排序
- @Author haifeng.cao
- @Date 2022/3/29 18:28
- @params [data]
- @return int[]
*/
public static int[] bubblingSort(int data[]){
int n = data.length;
for (int i = 0; i < n-1 ; i++) {
for (int j = 0; j < n-1; j++) {
if(data[j] > data[j+1]){ //交换值
data[j] = data[j] + data[j+1];
data[j+1] = data[j] - data[j+1];
data[j] = data[j] - data[j+1];
}
}
}
return data;
}
/**
- @Description 快速排序
- @Author haifeng.cao
- @Date 2022/3/29 18:28
- @params [data, left, right]
- @return void
*/
public static void fastSort(int data[],int left,int right){
int base = data[left]; //取一个基准数
int ll = left;
int rr = right;
while (ll < rr) {
//从后往前找比基准大的数
while (ll < rr && data[rr] >= base){
rr--;
}
if(ll < rr){ //交换值
data[rr] = data[rr] + data[ll];
data[ll] = data[rr] - data[ll];
data[rr] = data[rr] - data[ll];
ll++;
}
//从后往前找比基准小的数
while (ll < rr && data[ll] <= base){
ll++;
}
if(ll < rr){ //交换值
data[rr] = data[rr] + data[ll];
data[ll] = data[rr] - data[ll];
data[rr] = data[rr] - data[ll];
rr--;
}
}
//递归左边
if(left < ll) fastSort(data,left,ll-1);
//递归右边
if(right > ll) fastSort(data,ll+1,right);
}
}