快速排序算法的思想:通过一趟快速排序把需要排的序列分成独立的两部分,其中一部分所有数据都比另一部分所有数据大(小);然后这两部分按同样的方法排序,当每个序列的元素减少到一个的时候,排序结束,整个序列是有序的。此法可以用递归函数实现。
一趟的排序算法为:
1) 设变量i,j; i=最左元素,j=最右元素
2) 以最左元素为参照元素(key)进行比较
3) 从最右边j开始向左找,直到找到小于key的元素,交换
4) 从最左边i开始先右找,直到找到大于key的元素,交换
5) 重复3,4部,直到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);
}