最近学习一些排序查找算法,总感觉i,j 很难找到规律,通常情况下都是i,j 初始值和结束值不对,导致整个算法出错。
例如学习java源代码
private static void sort1(int x[], int off, int len) {
// Insertion sort on smallest arrays
if (len < 7) {
for (int i=off; i<len+off; i++)
for (int j=i; j>off && x[j-1]>x[j]; j--)
swap(x, j, j-1);
return;
}
觉得很怪怎么那样循环啊,特别是j的循环不理解。回家使劲折腾在本子上画图。
package datastructureandalgorithms;
public class ArraysSort1
{
public static void main(String[] args)
{
int a[] = { 1, 4, 2, 10, 6, 7, 8 };
sort2(a, 0, 6);
for (int a1 : a)
{
System.out.print(a1);
}
System.out.println();
sort1(a, 0, 6);
for (int a1 : a)
{
System.out.print(a1);
}
System.out.println();
}
public static void sort1(int a[], int startindex, int len)
{
// for (int i=off; i<len+off; i++)
// for (int j=i; j>off && x[j-1]>x[j]; j--)
// swap(x, j, j-1);
//两层循环 第二层 j 总是和 第一层 i有某种联系 例如 j=i 或者 j=i+1 或者 j=i-1;
//i++ 的话 i要小于某个数不能越过最大值,j--呢 j必须要大于某个数不能越过最小值
for (int i = startindex; i < startindex + len; i++)
{
for (int j = i; j > startindex && a[j - 1] > a[j]; j--)
{
int temp = a[j];
a[j] = a[j - 1];
a[j - 1] = temp;
}
}
//j比i大一,自然j的最大值要比i的最大值要加一
// for (int i = startindex; i < startindex + len; i++)
// {
// for (int j = i + 1; j < (startindex + len) + 1 && a[j] < a[j - 1];
// j++)
// {
// int temp = a[j];
// a[j] = a[j - 1];
// a[j - 1] = temp;
// }
// }
}
public static void sort2(int a[], int startindex, int len)
{
for (int i = startindex; i < startindex + len; i++)
{
for (int j = i + 1; j < (startindex + len) + 1; j++)
{
if (a[j - 1] > a[j])
{
int temp = a[j];
a[j] = a[j - 1];
a[j - 1] = temp;
}
}
}
}
}