# 一些说明

1.有哪些算法

2.这些算法的原理

3.这些算法的实现

4.这些算法的效率

public abstract class SortBase {
public abstract Integer[] sort(Integer[] a);

public static void print(Integer[] arrayForSort) {
System.out.print("[");
for(int i=0;i<arrayForSort.length;i++) {
if(i == arrayForSort.length - 1) {
System.out.print(arrayForSort[i]);
} else {
System.out.print(arrayForSort[i] + " ,");
}
}
System.out.println("]");
}

public static void print(String prefix,Integer[] arrayForSort) {
System.out.print(prefix + ": ");
System.out.print("[");
for(int i=0;i<arrayForSort.length;i++) {
if(i == arrayForSort.length - 1) {
System.out.print(arrayForSort[i]);
} else {
System.out.print(arrayForSort[i] + " ,");
}
}
System.out.println("]");
}
}

1.找到数组中最小的那个元素

2.将最小的这个元素和数组中第一个元素交换位置

3.在剩下的元素中找到最小的的元素，与数组第二个元素交换位置

public class SelectionSort extends SortBase {

public Integer[] sort(Integer[] a) {
print("init",a);
Integer minIndex = 0;
Integer temp = 0;
for(int i=0;i<a.length;i++) {
minIndex = i;
for(int j=i+1;j<a.length;j++) {
if(a[j] < a[minIndex]) {
minIndex = j;
}
}
temp = a[i];
a[i] = a[minIndex];
a[minIndex] = temp;

print((i+1) + "",a);
}
return a;
}

public static void main(String[] args) {
Integer[] a = {2,1,5,9,0,6,8,7,3};
print("result",(new SelectionSort()).sort(a));
}
}

init: [2 ,1 ,5 ,9 ,0 ,6 ,8 ,7 ,3]

1: [0 ,1 ,5 ,9 ,2 ,6 ,8 ,7 ,3]

2: [0 ,1 ,5 ,9 ,2 ,6 ,8 ,7 ,3]

3: [0 ,1 ,2 ,9 ,5 ,6 ,8 ,7 ,3]

4: [0 ,1 ,2 ,3 ,5 ,6 ,8 ,7 ,9]

5: [0 ,1 ,2 ,3 ,5 ,6 ,8 ,7 ,9]

6: [0 ,1 ,2 ,3 ,5 ,6 ,8 ,7 ,9]

7: [0 ,1 ,2 ,3 ,5 ,6 ,7 ,8 ,9]

8: [0 ,1 ,2 ,3 ,5 ,6 ,7 ,8 ,9]

9: [0 ,1 ,2 ,3 ,5 ,6 ,7 ,8 ,9]

result: [0 ,1 ,2 ,3 ,5 ,6 ,7 ,8 ,9]

public class InsertionSort extends SortBase {

@Override
public Integer[] sort(Integer[] a) {
// TODO Auto-generated method stub
print("init",a);
Integer temp = 0;

for(int i=1;i<a.length;i++) {
//只能从当前索引往前循环，因为索引前的数组皆为有序的，索引只要确定当前索引的数据的为止即可
for(int j=i;j>0 && a[j] < a[j-1];j--) {
temp = a[j];
a[j] = a[j-1];
a[j-1] = temp;
}
print(i +"",a);
}

print("result",a);
return a;
}

public static void main(String[] args) {
Integer[] a = {2,1,5,9,0,6,8,7,3};
(new InsertionSort()).sort(a);
}
}

init: [2 ,1 ,5 ,9 ,0 ,6 ,8 ,7 ,3]

1: [1 ,2 ,5 ,9 ,0 ,6 ,8 ,7 ,3]

2: [1 ,2 ,5 ,9 ,0 ,6 ,8 ,7 ,3]

3: [1 ,2 ,5 ,9 ,0 ,6 ,8 ,7 ,3]

4: [0 ,1 ,2 ,5 ,9 ,6 ,8 ,7 ,3]

5: [0 ,1 ,2 ,5 ,6 ,9 ,8 ,7 ,3]

6: [0 ,1 ,2 ,5 ,6 ,8 ,9 ,7 ,3]

7: [0 ,1 ,2 ,5 ,6 ,7 ,8 ,9 ,3]

8: [0 ,1 ,2 ,3 ,5 ,6 ,7 ,8 ,9]

result: [0 ,1 ,2 ,3 ,5 ,6 ,7 ,8 ,9]

public class ShellSort extends SortBase {

@Override
public Integer[] sort(Integer[] a) {
// TODO Auto-generated method stub
print("init",a);
Integer h = a.length;
Integer temp = 0;
while(h >= 1) {
for(int i=h;i<a.length;i++) {
for(int j=i;j>=h && a[j] < a[j-h];j -= h) {
temp = a[j];
a[j] = a[j-h];
a[j-h] = temp;

}
}
h /= 9;
}
print("result",a);
return a;
}

public static void main(String[] args) {
Integer[] a = {2,1,5,9,0,6,8,7,3};
(new ShellSort()).sort(a);
}
}

init: [2 ,1 ,5 ,9 ,0 ,6 ,8 ,7 ,3]

1: [0 ,1 ,5 ,7 ,2 ,6 ,8 ,9 ,3]

2: [0 ,1 ,2 ,6 ,3 ,7 ,5 ,9 ,8]

3: [0 ,1 ,2 ,3 ,5 ,6 ,7 ,8 ,9]

result: [0 ,1 ,2 ,3 ,5 ,6 ,7 ,8 ,9]

posted @ 2015-09-04 18:53  @瞪着太阳的乌鸦  阅读(37892)  评论(3编辑  收藏