外排序 java_常用排序(Java实现)

1.冒泡排序

public class BubbleSort {

public static void main(String[] args) {

int[] arr = new int[] { 3, 5, 1, 2, 6, 4 };

System.out.println("排序前数组为:");

for (int num : arr) {

System.out.print(num + " ");

}

sort(arr);

System.out.println();

System.out.println("排序后的数组为:");

for (int num : arr) {

System.out.print(num + " ");

}

}

public static void sort(int[] arr) {

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]) {

int num = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = num;

}

}

}

}

}

2.选择排序

public class SelectionSort {

public static void main(String[] args) {

int[] arr = new int[] { 3, 5, 1, 2, 6, 4 };

System.out.println("排序前");

for (int num : arr) {

System.out.print(num + " ");

}

for (int i = 0; i < arr.length - 1; i++) {// 做第i趟排序

int min = i;

for (int j = min + 1; j < arr.length; j++) {// 选最小的记录

if (arr[j] < arr[min]) {

min = j;// 记下目前找到的最小值所在的位置

}

}

// 在内层循环结束,也就是找到本轮循环的最小的数以后,再进行交换

if (i != min) { // 交换a[i]和a[min]

int temp = arr[i];

arr[i] = arr[min];

arr[min] = temp;

}

}

System.out.println();

System.out.println("排序后");

for (int num : arr) {

System.out.print(num + " ");

}

}

}

3.快速排序

public class QuickSort {

public static void main(String[] args) {

int[] arr = { 3, 5, 1, 2, 6, 4 };

System.out.println("排序前数组为:");

for (int num : arr) {

System.out.print(num + " ");

}

int start = 0;

int end = arr.length - 1;

sort(arr, start, end);

System.out.println();

System.out.println("排序后的数组为:");

for (int num : arr) {

System.out.print(num + " ");

}

}

public static int getMiddle(int[] arr, int start, int end) {

int key = arr[start];

while (start < end) {

// 从后往前比较

if (arr[end] >= key) {// 如果比关键值大,比较下一个,直到有比关键值小的交换位置,然后从前往后比较

end--;

}

arr[start] = arr[end];

// 从前往后比较

if (arr[start] <= key) {

start++;

}

arr[end] = arr[start];

}

arr[start] = key;

return start;

}

public static void sort(int[] array, int start, int end) {

if (start >= end) {

return;

}

int index = getMiddle(array, start, end);

sort(array, start, index - 1);

sort(array, index + 1, end);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值