JAVA实现
工具类
package com.wc4cloud.sort;
import java.util.Arrays;
import java.util.Random;
import java.util.stream.IntStream;
/**
* @author WC
* @date 2020/5/21
*/
public class Utils {
/**
* 生成随机数组
*
* @param len 数组长度
* @param max 数组最大值
* @return 生成的数组
*/
public static int[] generatorRandomIntArray(int len, int max) {
Random random = new Random();
return IntStream.generate(() -> random.nextInt(max)).limit(len).toArray();
}
/**
* 打印数组,方便比较
*
* @param array 需要打印的数组
*/
public static void printArray(int[] array) {
System.out.printf("sum:%s, array:%s\n", Arrays.stream(array).sum(), Arrays.toString(array));
}
}
冒泡排序
package com.wc4cloud.sort;
/**
* 冒泡排序
*
* @author WC
* @date 2020/5/21
*/
public class BubbleSort {
public static void main(String[] args) {
int[] array = Utils.generatorRandomIntArray(10, 10);
Utils.printArray(array);
// n个数则排序n-1次
for (int i = 1; i < array.length; i++) {
// 排除已排序的数据,则比较n-i-1次
for (int j = 0; j < array.length - i; j++) {
if (array[j] > array[j + 1]) {
//交换元素位置
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
Utils.printArray(array);
}
}
选择排序
package com.wc4cloud.sort;
/**
* 选择排序
*
* @author WC
* @date 2020/5/21
*/
public class SelectionSort {
public static void main(String[] args) {
int[] array = Utils.generatorRandomIntArray(10, 50);
Utils.printArray(array);
// n个数则排序n-1次
for (int i = 0; i < array.length - 1; i++) {
// 每次从i开始,获取本次最小的数,放入数组i位置
int min = i;
for (int j = i; j < array.length - 1; j++) {
if (array[min] > array[j + 1]) {
min = j + 1;
}
}
// 交换元素位置
int temp = array[min];
array[min] = array[i];
array[i] = temp;
}
Utils.printArray(array);
}
}
插入排序
package com.wc4cloud.sort;
/**
* 插入排序
*
* @author WC
* @date 2020/5/21
*/
public class InsertionSort {
public static void main(String[] args) {
int[] array = Utils.generatorRandomIntArray(10, 50);
Utils.printArray(array);
// 第一个数不需要排序,从第二个数开始
for (int i = 1; i < array.length; i++) {
// 临时保存当前下标的数据
int temp = array[i];
int j;
// 依次由小的数替换替换大的数
for (j = i - 1; j >= 0 && array[j] > temp; j--) {
array[j + 1] = array[j];
}
// 将临时变量放会到推出位置,由于推出时减去1,所以j + 1
array[j + 1] = temp;
}
Utils.printArray(array);
}
}
golang实现
工具类
package sort
import (
"fmt"
"math/rand"
)
//生成随机数组
//len 数组长度
//max 数组中最大值
func generatorRandomArray(len int, max int) []int {
arr := make([]int, len)
for i := 0; i < len; i++ {
arr[i] = rand.Intn(max)
}
return arr
}
//打印数组
//arr 需要被打印的数组
func printArray(arr []int) {
var sum int
for i := range arr {
sum += i
}
fmt.Printf("sum:%d, array:%v\n", sum, arr)
}
冒泡排序
package sort
//冒泡排序
func bubbleSort() {
arr := generatorRandomArray(10, 60)
printArray(arr)
for i := 1; i < len(arr); i++ {
for j := 0; j < len(arr)-i; j++ {
if arr[j] > arr[j+1] {
arr[j], arr[j+1] = arr[j+1], arr[j]
}
}
}
printArray(arr)
}
选择排序
package sort
//选择排序
func selectionSort() {
array := generatorRandomArray(10, 100)
printArray(array)
for i := 0; i < len(array)-1; i++ {
min := i
for j := i; j < len(array)-1; j++ {
if array[min] > array[j+1] {
min = j + 1
}
}
array[min], array[i] = array[i], array[min]
}
printArray(array)
}
插入排序
package sort
//插入排序
func insertSort() {
array := generatorRandomArray(10, 20)
printArray(array)
for i := 1; i < len(array); i++ {
temp := array[i]
var j int
for j = i - 1; j >= 0 && array[j] > temp; j-- {
array[j+1] = array[j]
}
array[j+1] = temp
}
printArray(array)
}