冒泡、选择、插入排序:
package algorithm;
import java.util.Arrays;
public class Insertionsort {
private static int arr[] = { 200, 489, 236, 187, 24, 1 };
/**
* 插入排序
* @param arr数组
*/
public void insert(int arr[]) {
for (int i = 1; i < arr.length; i++) { //a[0]前面没有单位,所以我们从a[1]开始比较
int v = arr[i]; //取出a[i]的值
for (int j = i - 1; j >= 0; j--) { //遍历a[i]之前的元素,与a[i]比较大小
if (v < arr[j]) { //若a[i]较小,则把该元素往后移动一个单位
arr[j + 1] = arr[j];
arr[j] = v;
}
}
}
}
/**
* 选择排序
* @param a
*/
public void selection(int arr[]) {
for (int i = 0; i < arr.length - 2; i++) { //遍历数组,直到该数组的倒数第二个元素为止,因为最后一个元素不需要比较大小
int v = i; //记录该元素的下标
for (int j = i + 1; j < arr.length; j++) {//依次取出该元素之后的元素跟该元素比较大小
if (arr[v] > arr[j]) { //若该元素之后的元素比该元素小,则把小元素的下标记录下来
v = j;
}
}
if (v != i) { //若选出来的小元素下标与初始下标不同,即该元素之后存在比其更小的元素
int t = arr[v]; //交换两者的值,每次找出的是最小的元素的下标
arr[v] = arr[i];
arr[i] = t;
}
}
}
/**
* 冒泡排序
* @param a
*/
public void bubble(int arr[]) {
for (int i = 0; i < arr.length - 2; i++) { //需要的比较的轮数
for (int j = 0; j < arr.length - 2 - i; j++) {//遍历数组,与之后的元素比较
if (arr[j] > arr[j + 1]) { //若该元素大于相邻元素,则交换两者的值
int t = arr[j]; //这样第一轮最大的元素就在数组的最后位置
arr[j] = arr[j + 1]; //同理第二轮第二大的的元素就在数组的倒数第二的位置
arr[j + 1] = t; //经过i轮我们就已经确定了最后i个元素的位置,
} //所以我们要在遍历的时候减去最后i个元素
}
}
}
/**
* 主函数
* @param args
*/
public static void main(String[] args) {
Insertionsort in = new Insertionsort();
in.insert(arr);
System.out.println("排序后的数组为:" + Arrays.toString(arr));
in.selection(arr);
System.out.println("排序后的数组为:" + Arrays.toString(arr));
in.bubble(arr);
System.out.println("排序后的数组为:" + Arrays.toString(arr));
}
}
快速排序:
package algorithm;
import java.util.Arrays;
/**
* 快速排序
*
* @author lcz
*
*/
public class KuaiSuPaiXu {
private static int arr[] = { 200, 489, 236, 187, 24, 1 };
public static void quickSort(int[] arr, int l, int r) {
if (l >= r) {
return;
}
int p = partition(arr, l, r); // 找寻中间位置
quickSort(arr, l, p - 1);
quickSort(arr, p + 1, r);
}
public static int partition(int[] arr, int l, int r) {
int v = arr[l]; // 取出第一个元素
int j = l; // j表示小于第一个元素和大于第一个元素的分界点
for (int i = l + 1; i <= r; i++) { // 将所有小于第一个元素的值放到它的左边,因为第一个元素最终会位于中间位置,所以目前该元素所放位置为中间位置的左边
if (arr[i] < v) {
swap(arr, i, j + 1);
j++;
}
}
swap(arr, l, j); // 将第一个元素与中间元素交换
return j;
}
private static int[] swap(int[] arr, int l, int j) {
int i = arr[l];
arr[l] = arr[j];
arr[j] = i;
return arr;
}
public static void main(String[] args) {
quickSort(arr, 0, arr.length - 1);
System.out.println("排序后的数组为:" + Arrays.toString(arr));
}
}