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); } } }