我无法弄清楚为什么这不起作用。
public class InsertionSort {
public static void main(String[] args) {
int x[] = { 9, 5, 8, 4, 3, 0, 6, 7, 2, 1 };
int[] result = InsertionSortMethod(x);
for (int z = 0; z < x.length; z++) {
System.out.print(x[z] + " ");
}
}
public static int[] InsertionSortMethod(int x[]){
for (int a = 0; a < x.length; a++) {
int divider = a;
if(divider > 0 & divider < x.length){
if(x[divider] < x[0]){
int temp = x[divider];
for(int c = divider; c > 0; c--){
x[c] = x[c-1];
}
x[0] = temp;
}
if(x[divider] > x[divider-1]){
x[divider] = x[divider];
}
else{
for(int b = divider-1; b > 0; b--){
if(x[divider] < x[b]){
int temp = x[divider];
x[divider] = x[b];
x[b] = temp;
}
}
}
}
}
return x;
}
}
答案 0 :(得分:0)
这是一个简单的插入排序功能:
void insertionSort(int[] arr) {
int i, j, newValue;
for (i = 1; i < arr.length; i++) {
newValue = arr[i];
j = i;
while (j > 0 && arr[j - 1] > newValue) {
arr[j] = arr[j - 1];
j--;
}
arr[j] = newValue;
}
}
答案 1 :(得分:0)
你说你想自己做,所以就这样:
for(int b = divider-1; b > 0; b--){
if(x[divider] < x[b]){
int temp = x[divider];
x[divider] = x[b];
x[b] = temp;
}
}
如果索引小于divider
的数组部分已经排序,x[divider]
介于x[0]
和x[1]
之间(例如divider
大于3,比如说),然后x[divider] < x[divider-1]
并在该循环中立即交换到位置divider-1
。但是,divider
的索引值x[b]
刚刚变得大于0 <= b <= divider-2
的{{1}},并且没有进行进一步的交换。处理这种情况的一种可能方法是在divider
内的每次交换divider = b;
后更新if
。