一、冒泡排序
import java.util.Scanner;
public class Homework10Zzy1 {
static Scanner scan = new Scanner(System.in);
/**
* @description
* @author jule_zhou
* @date 2022-07-15 13:43:49
* @param args
* @return
*/
public static void main(String[] args) {
//输入提示
System.out.println("请输入5名同学的成绩:");
//声明数组变量
int [] scoreArray = new int[5];
//遍历输入
for (int i = 0; i < scoreArray.length; i++) {
scoreArray[i] = scan.nextInt();
}
//输出提示
System.out.print("学员成绩按降序排列:");
int min = 0;
// 大---->小
//冒泡排序
for (int i = 0; i < scoreArray.length - 1; i++) {
for (int j = 0; j < scoreArray.length -i -1; j++) {
//判定大小,将符合条件的两者交换位置
if (scoreArray[j+1] > scoreArray[j]){
min =scoreArray[j];
scoreArray[j] = scoreArray[j+1];
scoreArray[j+1] = min;
}
}
}
//输出数组
for (int i = 0; i < scoreArray.length; i++) {
System.out.print(scoreArray[i] + "\t");
}
System.out.print("\n学员成绩按升序排列:");
//小---->大
for (int i = 0; i < scoreArray.length - 1; i++) {
for (int j = 0; j < scoreArray.length - i - 1; j++) {
if (scoreArray[j] > scoreArray[j + 1]){
int max = scoreArray[j];
scoreArray[j] = scoreArray[j + 1];
scoreArray[j + 1] = max;
}
}
}
//输出数组
for (int i : scoreArray) {
System.out.print(i + "\t");
}
}
}
二、选择排序
略
三、插入排序
public class Homework10Zzy3 {
/**
* @description 插入排序
* @author jule_zhou
* @date 2022-07-16 7:47:53
* @param args
* @return
*/
public static void main(String[] args) {
int num[] = {5,6,4,8,2,3,1,7,0,9};
for (int i = 1; i < num.length; i++) {
int id = num[i];
int j = i - 1;
//循环后移
while (j >= 0 && num[j] > id){
num[j + 1] = num[j];
j--;
}
num[j + 1] = id;
}
//输出结果
for (int i : num) {
System.out.println(i);
}
}
}
四、归并排序
import java.util.Arrays;
public class Homework10Zzy4 {
/**
* @description
* @author jule_zhou
* @date 2022-07-15 19:44:48
* @param args
* @return
*/
public static void main(String[] args) {
int num[] = {5,6,4,8,2,3,1,7,0,9};
int tempArray[ ] = Arrays.copyOf(num,num.length);
msort(num,tempArray,0,num.length - 1);
for (int i = 0;i < num.length;i ++){
System.out.println(num[i]);
}
}
/**
* @description 区域划分
* @author jule_zhou
* @date 2022-07-16 10:55:39
* @param array 数组
* @param tempArr 临时数组
* @param left 最左侧下标
* @param right 最右侧下标
* @return
*/
public static void msort(int[] array ,int[] tempArr,int left ,int right){
if (left <right){
int mid = (left + right) / 2;
//左半区划分
msort(array, tempArr, left, mid);
//右半区划分
msort(array, tempArr, mid + 1, right);
//合并已经排序的部分
merge(array,tempArr,left,mid,right);
}
}
/**
* @description 归并排序
* @author jule_zhou
* @date 2022-07-16 10:55:56
* @param array 数组
* @param tempArr 临时数组
* @param left 最左侧下标
* @param mid 中间值下标
* @param right 最右侧下标
* @return
*/
public static void merge(int[] array,int[] tempArr,int left,int mid,int right){
//标记左半区第一个未排序的元素
int l_pos = left;
//标记右半区第一个未排序的元素
int r_pos = mid + 1;
//临时数组
int pos =left;
//合并
while (l_pos <= mid && r_pos <= right){
if (array[l_pos] < array[r_pos]){
//左半区第一个剩余元素更小
tempArr[pos++] = array[l_pos ++];
}else {
//右半区第一个剩余元素更小
tempArr[pos++] = array[r_pos ++];
}
}
//合并左半区剩余元素
while (l_pos <= mid){
tempArr[pos++] = array[l_pos ++];
}
//合并右半区剩余元素
while (r_pos <= right){
tempArr[pos++] = array[r_pos ++];
}
//把临时数组中合并后的元素复制会原来的数组
while (left <= right){
array[left] = tempArr[left];
left ++;
}
}
}
五、快速排序
public class Homework10Zzy5 {
/**
* @description 快速排序
* @author jule_zhou
* @date 2022-07-16 10:54:12
* @param args
* @return
*/
public static void main(String[] args) {
int[] numArray={11,24,5,32,50,34,54,76};
qsort(numArray,0,numArray.length - 1);
for (int i : numArray) {
System.out.println(i);
}
}
/**
* @description 递归划分
* @author jule_zhou
* @date 2022-07-16 10:56:20
* @param numArray 数组
* @param left 最左侧下标
* @param right 最右侧下标
* @return
*/
public static void qsort(int[] numArray,int left,int right){
if (left < right){
int mid = part(numArray,left,right);
qsort(numArray,left,mid - 1);
qsort(numArray, mid + 1,right);
}
}
/**
* @description 快速排序
* @author jule_zhou
* @date 2022-07-16 10:56:24
* @param numArrays 数组
* @param left 最左侧索引位置
* @param right 最右侧索引位置
* @return {@link int} 划分位置
*/
public static int part(int[] numArrays,int left,int right){
int pos = numArrays[right];
int i = left;
for (int j =left;j < right; j ++){
//比pos小的换到前面去
if (numArrays[j] < pos){
int temp =numArrays[j];
numArrays[j] = numArrays[i];
numArrays[i] = temp;
i ++;
}
}
//此时,i指向的元素一定大于等于pos
int temp =numArrays[right];
numArrays[right] = numArrays[i];
numArrays[i] = temp;
return i;
}
}
六、二分法
二分法应用前提:数组必须已经排列好顺序