void quickSort(int * data, int low, int high)
{
int pivot;
if(low < high) //1.low == high 可以理解为数组只有一个元素。2.当前趟要确定最终位置的数的最终位置在:low == high处。3.low < high即表示数组至少有两个或两个以上的元素
{
pivot = partition(data, low, high); //先确定当前“混乱序列”的第一个最终位置。
quickSort(data, low, pivot - 1); //对“混乱序列”的左半进行排序
quickSort(data, pivot + 1, high); //对“混乱序列”的右半进行排序
}
}
int partition(int * data, int low, int high)
{
data[0] = data[low]; //在有效序列位中先空出一个位,用于位置调整。data[0]用于存储(当前趟需要确定最终位置的)数
while(low < high) //当前趟要确定最终位置的数的最终位置在:low == high处,所以low < high可以理解为没有找到最终位置
{
while(low < high && data[0] <= data[high])
high--; //high右边的数都是大于等于data[0]的数,所以每出现一个大于等于data[0]的数,high都应该向左靠一位。
if(low < high)
{
data[low] = data[high];
low++;
}
while(low < high && data[low] <= data[0])
low++; //low左边的数都是小于等于data[0]的数,所以每出现一个小于等于data[0]的数,low都应该向右靠一位。
if(low < high)
{
data[high] = data[low];
high--;
}
}
data[low] = data[0];
return low;
}
交换排序之快速排序
最新推荐文章于 2023-05-14 21:36:54 发布