一、插入排序
package com;
import java.util.Arrays;
/**
* 插入排序
* 思路:先默认第一个元素是有序的,然后从第二个元素开始向前比较。
* @title InsertionSort.java
*/
public class InsertionSort {
public static void main(String[] args) {
int[] arr = new int[] { 3, 43, 25, 16, 31, 57, 8 };
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 - 1];
arr[j - 1] = arr[j];
arr[j] = temp;
} else {
break;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
二、冒泡排序
package com;
import java.util.Arrays;
/**
* 冒泡排序
* 思路:数组中两个相邻元素进行两两比较。
* @title BubbleSort.java
*/
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {3, 43, 25, 16, 31, 57, 8};
System.out.println("排序前:" + Arrays.toString(arr));
int temp = 0;
for(int i=0; i<arr.length - 1; i++) {
for(int j=0; j<arr.length-1-i; j++) {
if(arr[j] > arr[j+1]) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
System.out.println("排序后:" + Arrays.toString(arr));
}
}
三、选择排序
package com;
import java.util.Arrays;
/**
* 选择排序
*/
public class SelectSort {
public static void main(String[] args) {
int[] arr = { 3, 43, 25, 16, 31, 57, 8 };
int size = arr.length;
int temp = 0;
for (int i = 0; i < size; i++) {
int k = i;
for (int j = size - 1; j > i; j--) {
if (arr[j] < arr[k]) {
k = j;
}
}
temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
}
System.out.println(Arrays.toString(arr));
}
}
四、折半查找
package com;
import java.util.Arrays;
/**
* 折半查找
* @title Search.java
*/
public class Search {
public static void main(String[] args) {
int[] arr = new int[] { 3, 43, 25, 16, 31, 57, 8 };
// 第一步:对给定数组进行排序
Arrays.sort(arr);
//System.out.println(Arrays.toString(arr));
// 第二步:实现查找
// 定义被查找的值
int num = 4;
// 定义一个低位的下标
int low = 0;
// 定义一个高位的下标
int height = arr.length - 1;
// 定义一个中间位的下标
int middle = (low + height) / 2;
boolean flag = false;
while(low <= height) {
if (num == arr[middle]) {
System.out.println("找到了,元素的下标为:" + middle);
flag = true;
break;
} else if (num < arr[middle]) {
height = middle - 1;
} else {
low = middle + 1;
}
middle = (low + height) / 2;
}
if(!flag) {
System.out.println("没找到。");
}
}
}
五、快速排序
package com.hpeu;
import java.util.Arrays;
/**
* 快速排序
*
* @title QuickSort.java
* 格式化代码的快捷键:ctrl+shift+f
*/
public class QuickSort {
public static int partition(int[] array, int lo, int hi) {
// 固定的切分方式
int key = array[lo];
while (lo < hi) {
// 从后半部分向前扫描
while (array[hi] >= key && hi > lo) {
hi--;
}
array[lo] = array[hi];
// 从前半部分向后扫描
while (array[lo] <= key && hi > lo) {
lo++;
}
array[hi] = array[lo];
}
array[hi] = key;
return hi;
}
public static void sort(int[] array, int lo, int hi) {
if (lo >= hi) {
return;
}
int index = partition(array, lo, hi);
sort(array, lo, index - 1);
sort(array, index + 1, hi);
}
public static void main(String[] args) {
int[] arr = { 3, 43, 25, 16, 31, 57, 8 };
//sort(arr, 0, arr.length - 1);
Arrays.sort(arr);
for (int em : arr) {
System.out.print(em + " ");
}
}
}