排序算法 java实现
几个排序算法,我是按照算法的伪代码用java实现的,刚开始是int类型的,后来换成泛型。
这是好早之前写的代码了,现在那出来温习下,就当是准备面试把
1.简单选择排序
这个算法应该是最简单的把,就是在数组中从头开始循环,选择最小的放在最前面,这个应该很好实现就不废话了
public static <T extends Comparable<T>> T[] genericsimpleselectionsort(T[] a){ for (int i = 0; i < a.length; i++) { int min = i; int j = i + 1; while (j < a.length) { if (a[j].compareTo(a[min])<0) min = j; j++; } T temp = a[i]; a[i] = a[min]; a[min] = temp; } return a; }
里面加上了泛型,就是T要集成Comparable接口,就是说T类型是能够比较的
可以写个测试代码,里面加上个main函数就可以了
public static void main(String[] args) { Random random=new Random(47); int n=20; Integer[] a=new Integer[n]; for (int i = 0; i < a.length; i++) { a[i]=random.nextInt(100); System.out.print(a[i]+" "); } System.out.println(); Integer[] b=SimpleSelectSort.genericsimpleselectionsort(a); for (int i = 0; i < b.length; i++) { System.out.print(b[i]+" "); } }
这只是测试20个数,可以改成10000,然后把输出注释掉,计算运行时间,比较不同排序算法的运行时间
2.选择排序算法的改进
改进一下简单选择排序算法,就是每趟选出最大,最小的,分别放在数组左右两边,所以循环只用做到n/2;
public static <T extends Comparable<T>> T[] genericselectionsort(T[] a) { int n = a.length; for (int i = 0; i < n / 2; i++) { int min = i; int max = i; int j = i + 1; while (j < n - i) { if (a[j].compareTo(a[min]) < 0) min = j; if (a[j].compareTo(a[max]) > 0) max = j; j++; } T temp = a[i]; a[i] = a[min]; a[min] = temp; temp = a[n - i - 1]; a[n - i - 1] = a[max]; a[max] = temp; } return a; }
3.插入排序
从给的数组的第二个数开始循环,数组前面是排好的,将取出的数一次跟前面排好序的数 从后向前比较,小就将该数的位置后移,知道找到合适的位置插入
好吧,用语言表达我说不好,应该用图的,但是还不会画图~~还是直接上代码把,很简单的算法,直接看代码应该没问题
public static <T extends Comparable<T>> T[] genericInsertSort(T[] a) { for (int i = 1; i < a.length; i++) { int j = i; T temp = a[j]; while (j > 0) { if (temp.compareTo(a[j - 1]) < 0) { a[j] = a[j - 1]; j--; } else { break; } } a[j] = temp; } return a; }
到下班时间了,先暂时记录这几个简单的排序