public static void main(String[] args) {
int[] s = {3, 2, 4, 5, 7, 6, 1};
sort(s);
negativeSort(s);
print(s);
}
/*
* 执行过程
* 1从第二个数开始,比较s[1..1]这个数组的值,比第一个数大就放在第一个数的后面
* 2然后是第三个数比较s[1...2]这个数组的值,如果比s[2]小就往前放,再比s[1]小就继续往前放
* 3依次类推
* 4直到最后一个数,排列完
* 5以上及插入排序*/
private static void print(int[] s){
for (int i = 0; i < s.length; i++) {
if(i == 0){
System.out.print("{");
}
System.out.print(s[i]);
if(i < s.length -1){
System.out.print(",");
}
if(i == s.length -1){
System.out.print("}\n");
}
}
}
private static int[] sort(int[] s){
for (int j = 1; j < s.length; j++) {
int key = s[j];
int i = j-1;
while (i >=0 && s[i] > key){
s[i+1] = s[i];
i = i -1;
}
s[i +1] = key;
}
return s;
}
private static int[] negativeSort(int[] s){
for (int j = 1; j < s.length; j++) {
int key = s[j];
int i = j-1;
while (i >=0 && s[i] < key){
s[i+1] = s[i];
i = i -1;
}
s[i +1] = key;
}
return s;
}
}
这个算法我没有看原理没有看演示图就开始着手写了,
以为自己几年编程经验完成它几乎不会费力气
但是话费了我快一个小时,结果总是不对
后来追bug发现根本就进不去替换位置的分支
开始意识到是我的条件可能用的有问题
所以改了条件结果才实现
做这个需要注意的点就是
- 条件的判断
- 初始化的复制
- 循环的组织
- 细节
原谅我的排版