输入一组数据小到大排序
void quick_sort(int *array, int left, int right)
{
if(left < right)
{
int i=left,j=right; /* i,j分别为左右 游标 */
while(i != j){
/* 扫描右边查找比比基准点小的数,如果是大的只需移动下标 */
while(i!=j && array[j]>array[i]) /* 此时基准点为 array[i] */
j--;
/* 上面的循环结束,说明在右边找到一个比基准的小的数 */
if(i!=j){
array[j] = array[i] ^ array[j]; /* 将基准点从i处换到j处 */
array[i] = array[i] ^ array[j];
array[j] = array[i] ^ array[j];
i++; /* 当前下标为j的数字 已经被置换到下标为i的位置,而此时的这个数据小于基准点,所以i++为下一个左边需要比较的数 */
}
while(i!=j && array[i]<array[j]) /* 此时基准点为 array[j] */
i++;
/* 上面的循环结束,说明在左边找到一个比基准的大的数 */
if(i!=j){
array[i] = array[i] ^ array[j]; /* 将基准点从j处换到i处 */
array[j] = array[i] ^ array[j];
array[i] = array[i] ^ array[j];
j--; /* 基准点已经放到i的地方去了。下一个循环我们将比较j--处的数据是否比基准点小 */
}
};
/* 上面的循环结束,说明已经将数据安装 {小于Key的数据}Key{大约Key的数据} 排列。此时i=j指向基准点 */
quick_sort(array, left, i-1);
quick_sort(array, i+1, right);
}
}