基本的code,数组循环i,j

来源:互联网 发布:mac ps无法退出全屏 编辑:程序博客网 时间:2024/04/30 01:07

最近学习一些排序查找算法,总感觉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;    }   }  }

 }}

 
原创粉丝点击