各种排序
int[] arr = {8,9,6,5,4,7,1,2,3};
selectionSort(arr);//选择
printArray(arr);
breakArray(arr);//打乱
bubbleSort(arr);//冒泡
printArray(arr);
breakArray(arr);
insertSort(arr);//插入
printArray(arr);
breakArray(arr);
insertSort1(arr);//插入另一种
printArray(arr);
breakArray(arr);
quickSort(arr, 0 ,arr.length - 1);//快速排序
printArray(arr);
}
// 单次快速排序
static void quickSort(int[] array, int s, int e) {
if (s >= e) { //出口
return;
}
int start = s; // =0
int end = e;// = array.length - 1
//把头部的第一个值作为基准值
int temp = array[start];
while (start < end) {
//从尾部找比基准值小的
while (start < end && temp < array[end]) {
end--;
}
//把比基准值小的保存到头部
if (start < end) {
array[start] = array[end];
// printArray(array);//输出基准值左边的过程
start++;
}
//从头部找比基准值大的
while (start < end && temp > array[start]) {
start++;
}
//把比基准值大的保存到尾部
if (start < end) {
array[end] = array[start];
// printArray(array);//输出基准值右边的过程
end--;
}
}
//头部跟尾部重合,找到基准值的位置
//start == end
array[start] = temp;
//头部数组递归调用
quickSort(array, s, start - 1);
quickSort(array , s + 1, e);
}
//插入排序
static void insertSort(int[] array){
for (int i = 1; i < array.length; i++) {
int j = i;
int temp = array[j];
while (j > 0 && temp < array[j - 1]) {
array[j] = array[j - 1];
j--;
}
array[j] = temp;
}
}
//插入排序1
static void insertSort1(int[] array) {
for (int i = 1; i < array.length; i++) {
int j = i;
int temp = array[j];
while (j > 0 && temp < array[j - 1]) {
array[j] = array[j - 1];
j--;
}
array[j] = temp;
}
}
//折半查找
static int halfSeek(int[] array, int target) {
int start = 0;
int end = array.length - 1;
while (start <= end) {
int mid = (start + end) / 2;
if (array[mid] > target) {
end = mid - 1;
}else if (array[mid] < target) {
start = mid + 1;
}else {
return mid;
}
}
return -1;
}
//选择排序
static void selectionSort(int[] array) {
for (int i = 0; i < array.length - 1; i++) {
int midIndex = i;
for (int j = midIndex + 1; j < array.length; j++) {
if (array[midIndex] > array[j]) {
midIndex = j;
}
}
if (midIndex != i) {
int temp = array[i];
array[i] = array[midIndex];
array[midIndex] = temp;
}
}
}
//打乱数组
static void breakArray(int[] array) {
for (int i = array.length - 1; i >= 0; i--) {
int r = (int)(Math.random() * (i + 1));
int temp = array[r];
array[r] = array[i];
array[i] = temp;
}
}
//冒泡排序
static void bubbleSort(int[] array) {
boolean flag = false;
int iMax = array.length - 1;
for (int i = 0; i < iMax; i++) {
flag = true;
for (int j = 0; j < iMax - i; j++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
flag = false;
}
}
}
}
//输出的格式
static String array2String(int[] array) {
if (array == null) {
return "null";
}
int iMax = array.length - 1;
if (iMax == -1) {
return "[]";
}
StringBuilder s = new StringBuilder();
s.append("[");
for (int i = 0; ; i++) {
s.append(array[i]);
if (i == iMax) {
return s.append("]").toString();
}
s.append(", ");
}
}
//输出
static void printArray(int[] array) {
System.out.println(array2String(array));
浙公网安备 33010602011771号