工作没有领导不行,电视没有广告不行,消费没有钞票不行,炒股没有胆量不行,这些其实都没什么,关键是新年到了,没祝福你就绝对不行。祝CSDN网友:一年高兴,两手钱挣,三餐杯碰,四面关系,五福同庆,六处逢缘,七彩轿车,八方人敬,久做美梦,十分如意!

解决方案 »

  1.   

    好!词好!谢谢LZ也祝LZ新年快乐!~~~~~~~~~~jF
      

  2.   

    新年快乐!!!请教c#:箱排序,桶排序,堆排序写法
    已完成以下算法:冒泡排序,插入排序,希尔排序,快速排序,基数排序/// <summary>
    /// 冒泡排序
    /// </summary>
    /// <param name="arr"></param>
    public void Sort(int[] arr)
    {
        for (int i = arr.Length - 1; i > 0; i--)
        {
            for (int j = 0; j < i; j++)
            {
                if (arr[i] < arr[j])
                {
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
    }/// <summary>
    /// 插入排序
    /// </summary>
    /// <param name="arr"></param>
    public void Sort(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;
        }
    }/// <summary>
    /// 快速排序
    /// </summary>
    /// <param name="list"></param>
    /// <param name="low"></param>
    /// <param name="high"></param>
    public void Sort(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)
            Sort(list, low, r - 1);
        if (r + 1 < high)
            Sort(list, r + 1, high);
    }/// <summary>
    /// 交换位置ExchageValue
    /// </summary>
    /// <param name="l"></param>
    /// <param name="r"></param>
    private void Swap(ref int l, ref int r)
    {
        int temp;
        temp = l;
        l = r;
        r = temp;
    }
    /// <summary>
    /// 希尔排序
    /// </summary>
    /// <param name="arr"></param>
    public void Sort(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;
            }
        }
    }/// <summary>
    /// 基数排序
    /// </summary>
    /// <param name="arr"></param>
    /// <param name="digit"></param>
    /// <returns></returns>
    public int[] Sort(int[] arr, int digit)
    {
        //low to high digit
        for (int k = 1; k <= digit; k++)
        {
            //temp array to store the sort result inside digit
            int[] tmpArray = new int[arr.Length];
            //temp array for countingsort 
            int[] tmpCountingSortArray = new int[10] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
            //CountingSort        
            for (int i = 0; i < arr.Length; i++)
            {
                //split the specified digit from the element 
                int tmpSplitDigit = arr[i] / (int)Math.Pow(10, k - 1) - (arr[i] / (int)Math.Pow(10, k)) * 10;
                tmpCountingSortArray[tmpSplitDigit] += 1;
            }
            for (int m = 1; m < 10; m++)
            {
                tmpCountingSortArray[m] += tmpCountingSortArray[m - 1];
            }
            //output the value to result      
            for (int n = arr.Length - 1; n >= 0; n--)
            {
                int tmpSplitDigit = arr[n] / (int)Math.Pow(10, k - 1) - (arr[n] / (int)Math.Pow(10, k)) * 10;
                tmpArray[tmpCountingSortArray[tmpSplitDigit] - 1] = arr[n];
                tmpCountingSortArray[tmpSplitDigit] -= 1;
            }
            //copy the digit-inside sort result to source array       
            for (int p = 0; p < arr.Length; p++)
            {
                arr[p] = tmpArray[p];
            }
        }
        return arr;
    }