原理:找出一个数字,然后从该数列的右边找一个数比该数字大的第一个数,填入该数的位置中去,然后又从左往右找第一个数大于或等于该数字的数,然后填入上一个数的位置中去(也就是上一次找比该数字大的第一个数的位置中去)直到i和j 相遇就停止循环,再排序它右边和左边就OK了。
代码:
void quickSort(int s[], int f, int r)
{
if (f < r)
{
int i = f, j = r, x = s[f];//i:从左向右遍历 j:从右向左遍历 x:记录第一个点位置(基准数)
while (i < j)
{
while (i < j && s[j] >= x) // 从右向左找第一个小于x的数
j--;
if (i < j)
s[i++] = s[j];
while (i < j && s[i] < x) // 从左向右找第一个大于等于x的数
i++;
if (i < j)
s[j--] = s[i];
}
s[i] = x;//当i >= j 跳出循环
quickSort(s, f, i - 1); // 递归调用 排序右边
quickSort(s, i + 1, r);//排序左边
}
}
int main()
{
int array[] = { 34,65,12,43,67,5,78,10,3,70 }, k;
int len = sizeof(array) / sizeof(int);
cout << "原数组顺序" << endl;
for (k = 0; k < len; k++)
cout << array[k] << ",";
cout << endl;
quickSort(array, 0, len - 1);
cout << "快速排序后" << endl;
for (k = 0; k < len; k++)
cout << array[k] << ",";
cout << endl;
}
效果:

本文深入讲解了快速排序算法的工作原理及实现过程,通过详细的代码示例展示了如何使用递归进行左右子序列的排序,最终达到整个序列有序的状态。快速排序是一种高效的排序方法,通过选取基准元素并进行分区操作,实现数据的高效排序。
954

被折叠的 条评论
为什么被折叠?



