//快速排序算法
//快速排序算法运用了递归原理
//一趟快速排序的算法是:
//1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;
//2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];
//3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;
//4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;
//5)重复第3、4步,直到i=j;
//(3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。
//找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。
以下为算法的具体实现:
void quit_sort(int *numb, int left_index, int right_index)
{
if(left_num >= right_num)
{
return; //如果左索引大于或等于右索引,则说明整理完一组,返回
}
int i = left_index;
int j = right_index;
int key = numb[left_index]; //为比较值赋初值
while(i<j)
{
while((i<j) && (key<numb[j]))
{
j--; //如果numb[j]>key则继续向左寻找比key大的值
}
numb[i] = numb[j]; //将比key小的数赋给numb[i],如果i=j了,则为numb[i] = numb[i],不会对结果造成影响
while((i<j) && (key >= numb[i]))
{
i++; //如果numb[i]<=key则继续向右寻找比key小的值
}
numb[j] = numb[i]; //将比key大的数赋给numb[j];
}
numb[i] = key;
quit_sort(numb, left_index, i-1); //由于numb[i]为中间值,比其大的在右边比其小的在左边,因此numb[i]的值不需要在去比较
quit_sort(numb, i+1, right_index);
}