• C#之快速排序易产生错误代码对比


    public void QuickSort(int fore, int last)  //快速排序算法                  
            {
                int begin = fore;
                int end = last;
                int tem = data[fore];  //基准元素
                while (begin != end)   //当左右两端扫描未碰头时
                {
                    if (data[end] < tem)  //当基准元素后面的元素大于基准元素后
                    {
                        data[begin] = data[end];
                        while (begin != end)
                        {
                            if (data[begin] > tem)
                            {
                                data[end] = data[begin];
                                break;
                            }
                            else
                            {
                                begin++;  //向右挪动
                            }
                        }
                    }
                    //****************************
                    else                        **
                    {                           **  
                        end--;  //向左挪动      **  
                    }                           **  
                    //**************************** 
                    // 改成 
                    //end--; 
                  /*
                     会产生错误,因为这样 end-- 语句必执行,而    
                     当上面的while语句执行完并跳出来后执行此语句使得本已满足  
                     begin!=end 的条件变成 end<begin 从而照样满足 begin!=end,
                     while循环继续执行导致数组下标越界  
                  */                    
    
                }
                data[begin] = tem;
                if (fore !=begin)
                {
                    int i = fore;
                    int j= begin - 1;
                    QuickSort(i,j);
                }
                if (begin != last)
                {
                    int i= begin + 1;
                    int j = last;
                    QuickSort(i, j);
                }
            }
        }

  • 相关阅读:
    Java vs Python
    Compiled Language vs Scripting Language
    445. Add Two Numbers II
    213. House Robber II
    198. House Robber
    276. Paint Fence
    77. Combinations
    54. Spiral Matrix
    82. Remove Duplicates from Sorted List II
    80. Remove Duplicates from Sorted Array II
  • 原文地址:https://www.cnblogs.com/zztong/p/6695180.html
Copyright © 2020-2023  润新知