快速排序算法(qsort)

    

快速排序算法的思想:通过一趟快速排序把需要排的序列分成独立的两部分,其中一部分所有数据都比另一部分所有数据大(小);然后这两部分按同样的方法排序,当每个序列的元素减少到一个的时候,排序结束,整个序列是有序的。此法可以用递归函数实现。

一趟的排序算法为:

1)   设变量i,j; i=最左元素,j=最右元素

2)  以最左元素为参照元素(key)进行比较

3)  从最右边j开始向左找,直到找到小于key的元素,交换

4)  从最左边i开始先右找,直到找到大于key的元素,交换

5)  重复34部,直到i>=j 跳出

 

下面是代码:

void qsort(int s[],int left,int right){

       int key=s[left];/*最左边的元素当key*/

       int i=left,j=right-1;

       int r2l=1;/*right to left*/

       if(i>=j) /*只有一个元素时,跳出递归函数*/

              return;

       while(i<j){/*i=j时跳出*/

              if(r2l){//右向左找

                     if(s[j]<key){/*找到*/

                            s[i++]=s[j];                         

                            r2l=0;//换个方向

                     }else{

                            j--;

                     }

              }else{//左向右找

                     if(s[i]>key){

                            s[j--]=s[i];

                            r2l=1;

                     }else{

                            i++;

                     }

              }

             

       }

       s[i]=key;/*i=j,即是key所在的位置*/ 

       qsort(s,left,i);

       qsort(s,i+1,right);

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值