public static void Sort(int[] arr)
        {
            int inc;
            for (inc = 1; inc <= arr.Length / 9; inc = 3 * inc + 1) ;  //这个是什么意思??是for循环么??
            for (; inc > 0; inc /= 3)
            {
                for (int i = inc + 1; i <= arr.Length; i += inc)
                {
                    int t = arr[i - 1];
                    int j = i;
                    while ((j > inc) && (arr[j - inc - 1] > t))
                    {
                        arr[j - 1] = arr[j - inc - 1];
                        j -= inc;
                    }
                    arr[j - 1] = t;
                }
            }
        }
 详细解释下这个方法的每一步

解决方案 »

  1.   

     for (inc = 1; inc <= arr.Length / 9; inc = 3 * inc + 1) ;  //这个是什么意思??是for循环么?? 是循环,好像是在寻找要处理的数组中数据的开始位置,以3倍加一得方法一致找到最后一个。
      

  2.   

    五种排序算法实现class Sorter    {        //选择排序法实现        private int min;        public void Sort1(int[] arr)        {            for (int i = 0; i < arr.Length - 1; ++i)            {                min = i;                for (int j = i + 1; j < arr.Length; ++j)                {                    if (arr[j] < arr[min])                        min = j;                }                int t = arr[min];                arr[min] = arr[i];                arr[i] = t;            }        }        //冒泡排序法实现        public void Sort2(int[] arr)        {            int i, j, temp;            bool done = false;            j = 1;            while ((j < arr.Length) && (!done))//判断长度            {                done = true;                for (i = 0; i < arr.Length - j; i++)                {                    if (arr[i] > arr[i + 1])                    {                        done = false;                        temp = arr[i];                        arr[i] = arr[i + 1];//交换数据                        arr[i + 1] = temp;                    }                }                j++;            }        }        private void swap(ref int l, ref int r)        {            int temp;            temp = l;            l = r;            r = temp;        }        //快速排序法实现        public void Sort3(int[] list, int low, int high)        {            int pivot;//存储分支点            int l, r;            int mid;            if (high <= low)                return;            else if (high == low + 1)            {                if (list[low] > list[high])                    swap(ref list[low], ref list[high]);                return;            }            mid = (low + high) >> 1;            pivot = list[mid];            swap(ref list[low], ref list[mid]);            l = low + 1;            r = high;            do            {                while (l <= r && list[l] < pivot)                    l++;                while (list[r] >= pivot)                    r--;                if (l < r)                    swap(ref list[l], ref list[r]);            } while (l < r);            list[low] = list[r];            list[r] = pivot;            if (low + 1 < r)                Sort3(list, low, r - 1);            if (r + 1 < high)                Sort3(list, r + 1, high);        }        //插入排序法实现        public void Sort4(int[] arr)        {            for (int i = 1; i < arr.Length; i++)            {                int t = arr[i];                int j = i;                while ((j > 0) && (arr[j - 1] > t))                {                    arr[j] = arr[j - 1];//交换顺序                    --j;                }                arr[j] = t;            }        }        //希尔排序法实现        public void Sort5(int[] arr)        {            int inc;            for (inc = 1; inc <= arr.Length / 9; inc = 3 * inc + 1) ;            for (; inc > 0; inc /= 3)            {                for (int i = inc + 1; i <= arr.Length; i += inc)                {                    int t = arr[i - 1];                    int j = i;                    while ((j > inc) && (arr[j - inc - 1] > t))                    {                        arr[j - 1] = arr[j - inc - 1];//交换数据                        j -= inc;                    }                    arr[j - 1] = t;                }            }        }    }