快速排序
Posted zhuifeng-mayi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序相关的知识,希望对你有一定的参考价值。
快速排序的思想是:
在整个数列中,选取一个特征点,一般以数列的中心为该特征点,使其小于特征点的数放在特征点的左侧,大于特征点的数放在右侧。
(1)若特征点最左侧的数小于特征点,而特征点最右侧的数大于特征点,则左侧数右移一位,而右侧色数左移一位
(2)若此时左侧的数值大于特征点,而右侧的数字小于特征点,则两者数值调换
(3)若左侧数值大于特征点,右侧数值也大于特征点,则右侧特征点左移一位,直到此时特征点右侧的数值小于特征点,将特征点左右两侧色数值互调
(4)若左侧数值小于特征点,右侧数值也小于特征点,则左侧特征点右移一位,直到此时特征点左侧的数值大于特征点,将特征点左右两侧色数值互调
(5)然后采用递归的方式,使其整个数列呈现递增。
#include<iostream> using namespace std; void quick_sort(int num[], int left, int right) { int i = left; //数列的左下标赋给i int j = right; //数列的右下标赋给j int povit = num[(i+j) / 2]; //找特征值 while ( i <= j) //当i<j时 { while (num[i] < povit) //左侧值小于特征点 { i++; //右移 } while (num[j]>povit) //右侧值大于特征点 { j--; //左移 } if (i <= j) //特征点左右两侧数值对调 { int temp = num[i]; num[i] = num[j]; num[j] = temp; i++; j--; } } if (i < right) // 例: 1,2,3,4,5,6,8,7状况 { quick_sort(num, i, right); } if (left < j) // 列: 2,1,3,4,5,6,7,8状况 { quick_sort(num, left, j); } } int main() { int a[] = { 1, 3, 4, 6, 2, 7, 8, 1 }; quick_sort(a, 0, 7); for (int i = 0; i < 8; i++) { cout << a[i] << endl; } system("pause"); return 0; }
以上是关于快速排序的主要内容,如果未能解决你的问题,请参考以下文章