对于排序中的快排,在实际中会经常遇到,而且快排本身也有不同的实现方式,其中一种实现:
- int quick_sort_internal(T* str, int low, int high)
- {
- // check the string
- assert(str != 0);
- if (low < 0 || high < 0)
- {
- return -1;
- }
- T temp = *(str + low);
- while (low < high)
- {
- while (*(str + high) >= temp && low < high)
- {
- high--;
- }
- *(str + low) = *(str + high);
- while (*(str + low) <= temp && low < high)
- {
- low++;
- }
- *(str + high) = *(str + low);
- }
- *(str + high) = temp;
- return high;
- }
这里注意想说明下,红色的地方需要注意:
1. low < high, 这里< 不能变成<=,因为在比较过程中,比较的是数组内部的元素,当low==high的时候,这个位置肯定是最后要停留的位置,在将high减1的话,就会造成结果的不正确
2. 在两个while循环中,也要有low<high这样的语句,因为在while循环中,很有可能出现low >= high的情形,而如果没有判断,就会使得这个超出范围没有控制而使得结果出现问题