交换排序之快速排序

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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值