public static void charu(int a[])
{
int j;
for (int i = 1; i < a.length; i++)
{
int temp=a[i];
j=i-1;
while(j>=0&&a[j]<temp)
{
a[j+1]=a[j];这不是把数据都覆盖了嘛
j--;
}
a[j+1]=temp;//a[0]的值那 总也传不到a[0]里去
}
}
再有麻烦下把上面题目改下for循环
小弟学习时间不长,麻烦高手给细心讲讲
{
int j;
for (int i = 1; i < a.length; i++)
{
int temp=a[i];
j=i-1;
while(j>=0&&a[j]<temp)
{
a[j+1]=a[j];这不是把数据都覆盖了嘛
j--;
}
a[j+1]=temp;//a[0]的值那 总也传不到a[0]里去
}
}
再有麻烦下把上面题目改下for循环
小弟学习时间不长,麻烦高手给细心讲讲
a[j+1]=a[j];
public static void charu(int a[])
{
int j;
for (int i = 1; i < a.length; i++)
{
int temp=a[i];//每趟将a[i]插入到它前面已排好的子序列中去。
j=i-1;
while(j>=0&&a[j]<temp)//前面较大的元素向后移动。
{
a[j+1]=a[j];这不是把数据都覆盖了嘛//不是前面较大的元素向后移动。j--;
}
a[j+1]=temp;//a[0]的值那 总也传不到a[0]里去//temp的值到达插入位置。
}
}
例如:32 26 87 72 26 17 8 40
第一趟26 32 87 72 26 17 8 40
第二趟 26 32 87 72 26 17 8 40
第三趟:26 32 72 87 26 17 8 40
第四趟:26 26 32 72 87 17 8 40
不再一一给出了。
其实for循环只是把j=i-1;
while(j>=0&&a[j]<temp)
改为for(j=i-1;j>-1&&a[j]>temp;j++)即可
* 插入排序
* @author xqh
*
*/
public class InsertSort {
public static void main(String[] args) {
int[] arr = {2, 5, 6, 3, 1, 4};
InsertionSort(arr);//插入排序
for (int i : arr)
System.out.print(i + " ");//输出排序后的数组
}
/**
* 插入排序算法(从小到大)
* @param arr
*/
static void InsertionSort(int[] arr) {
for (int i = 1; i < arr.length; i++) {
int itemToInsert = arr[i]; // 当前要插入的数
int j = i - 1;
while (j >= 0) {
if (itemToInsert < arr[j]) {
arr[j + 1] = arr[j]; // 覆盖后面的数,直到找到比当前要插入的数来得小的数
j--; // 下标往前移动
} else
break;
}
arr[j + 1] = itemToInsert; // 把当前要插入的数 放到合适的位置
}
}
}