package com.yq.javaSEPrj.algorithm;
import java.util.Arrays;
public class Sort {
public static void main(String[] args) {
final int a = 10;
int[] arr = {12,24,453,534,1,2,3};
// bubbleSort(arr);
// selectionSort(arr);
quickSort(arr,0,arr.length - 1);
System.out.println(Arrays.toString(arr));
}
/**
* 冒泡排序
* @param array
*/
public static void bubbleSort(int[] array) {
//控制大循环
for (int i = 0; i < array.length - 1; i++) {
for (int j = 0; j < array.length - i - 1; j++) {
if (array[i] > array[i + 1]) {
int temp = array[i];
array[i] = array[i + 1];
array[i + 1] = temp;
}
}
}
}
/**
* 选择排序
*
* * 选择排序算法思想:首先在未排序序列中找到最小元素,
* * 交换到序列的首位;然后,再从剩余未排序序列中寻找最小元素,
* * 交换到未排序序列首位。以此类推,直到未排序序列中的元素只剩一个
*/
public static void selectionSort(int[] array) {
//入参校验
if(array == null || array.length <= 0 ) {
return;
}
for (int startIndex = 0; startIndex < array.length - 1; startIndex++) {
//定义最小数位置从起始位置开始
int minIndex = startIndex;
//定义最小数,默认取第一个位置
int minNum = array[startIndex];
for (int i = startIndex; i < array.length; i++) {
if(minNum > array[i]) {
//记录较小值
minNum = array[i];
//记录较小值位置
minIndex = i;
}
}
//交换最小值和起始值位置
array[minIndex] = array[startIndex];
array[startIndex] = minNum;
}
}
/**
* 快速排序
*
* 从序列中选取一个值作为比较字,基于该比较字将序列分割为左右两部分,左边的值均小于该比较字,右边的值均大于该比较字,此时该比较字的位置即确定;
* 之后对左右两侧的序列分别执行上述过程。
* 比较字的选择:可以选择序列的第一个位置的值,也可选择中间位置的值。
*/
public static void quickSort(int[] arr,int left,int right) {
// 入参校验
if (arr == null && arr.length == 0) {
return;
}
if (left > right) {
return;
}
int l = left;
int r = right;
int key = arr[left];
while (l != r) {
while (arr[r] >= key && l < r) {
r --;
}
while (arr[l] <= key && l < r) {
l ++;
}
if (l < r) {
int temp = arr[l];
arr[l] = arr[r];
arr[r] = temp;
}
}
arr[left] = arr[l];
arr[l] = key;
quickSort (arr, left, l - 1);
quickSort (arr, l + 1, right);
}
}