1、冒泡排序
示例:
package com.zdc.sort;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class Maopao {
public static void main(String[] args) {
int[] strArr = {3,1,5,7,2,4,9,6,10,8};
for (int i = 0; i < strArr.length; i++) {
for (int j = 0; j < strArr.length-i-1; j++) {
if (strArr[j] > strArr[j+1]) {
int swap = strArr[j];
strArr[j] = strArr[j+1];
strArr[j+1] = swap;
}
}
}
System.out.println(strArr);
}
2、快速排序:
示例:
package com.zdc.sort;
import java.util.ArrayList;
import java.util.List;
public class QuikSort {
public static void main(String[] args) {
List<Integer> strArr1 = new ArrayList<Integer>();
strArr1.add(3);
strArr1.add(1);
strArr1.add(5);
strArr1.add(7);
strArr1.add(2);
strArr1.add(4);
strArr1.add(9);
strArr1.add(6);
strArr1.add(10);
strArr1.add(8);
quik(strArr1);
}
public static List<Integer> quik(List<Integer> strArr){
Integer doubleval = (int) Math.floor(strArr.size()/2);
List<Integer> left = new ArrayList<Integer>();
List<Integer> right = new ArrayList<Integer>();
for (int i = 0; i < strArr.size(); i++) {
if (strArr.get(i) < strArr.get(doubleval)) {
left.add(strArr.get(i));
}else {
right.add(strArr.get(i));
}
}
return quik(left);
}
}
3、选择排序:
示例:
package com.atguigu.spring.sort; import java.util.Arrays; /** * 选择排序 */ public class XunZe { public static void main(String[] args) { int[] data = {1,6,3,9,3,2,7}; System.out.println(Arrays.toString(selectSort(data))); } /** * 过程 * @param data * @return */ private static int[] selectSort(int[] data){ if (data.length == 0) return data; for (int i = 0; i < data.length; i++) { int minIndex = i; for (int j = i; j < data.length; j++) { if (data[j] < data[minIndex]) //找到最小的数 minIndex = j; //将最小数的索引保存 } int temp = data[minIndex]; data[minIndex] = data[i]; data[i] = temp; } return data; } }
4、希尔排序(插入排序)
示例:
package com.atguigu.spring.sort; import java.util.Arrays; public class InsertSort { public static void main(String[] args) { int[] data = {1,6,3,8,5,9,2}; System.out.println(Arrays.toString(insertMethod(data))); } /** * 方法过程 * @param data * @return */ private static int[] insertMethod(int[] data){ int len = data.length; int temp, gap = len / 2; while (gap > 0) { for (int i = gap; i < len; i++) { temp = data[i]; int preIndex = i - gap; while (preIndex >= 0 && data[preIndex] > temp) { data[preIndex + gap] = data[preIndex]; preIndex -= gap; } data[preIndex + gap] = temp; } gap /= 2; } return data; } }
5、归并排序
示例:
package com.atguigu.spring.sort; import java.util.Arrays; public class MergeSort { public static void main(String[] args) { int[] data = {1,6,3,8,5,9,2}; System.out.println(Arrays.toString(mergeMethodSort(data))); } private static int[] mergeMethodSort(int[] data){ if (data.length < 2) return data; int mid = data.length / 2; int[] left = Arrays.copyOfRange(data, 0, mid); int[] right = Arrays.copyOfRange(data, mid, data.length); return mergeProcess(mergeMethodSort(left), mergeMethodSort(right)); } /** * 将两段排序好的数组结合成一个排序数组 * @param left * @param right * @return */ private static int[] mergeProcess(int[] left, int[] right){ int[] result = new int[left.length + right.length]; for (int index = 0, i = 0, j = 0; index < result.length; index++) { if (i >= left.length) result[index] = right[j++]; else if (j >= right.length) result[index] = left[i++]; else if (left[i] > right[j]) result[index] = right[j++]; else result[index] = left[i++]; } return result; } }