快速排序

总共大致分为几种,包括选择排序法,冒泡排序法,插入排序法,快速排序法和堆排序。
其中比较简单的是选择冒泡和插入,比较抽象的就是快排和堆排。这里先讲快排,因为这也是比较常用的算法,包含在algorithm头文件里面。
关于快排实际上就是分治思想和递归思想的结合。快排的函数是一个递归函数,其中将排序数组分治成为两块。
每次都分治成为两块,然后将其中的第一个数作为标准值,大的放在标准值的后面,小的放在标准值的前面,最后将中间的数值和标准值交换位置。
这实际上就是设置一个中间量,交换原数组中比标准值大的数和比标准值小的数的位置的事情,因为标准值是一个虚拟放在中间的数,最后将标准值放置到位。
还有要利用的是数组的双排思想。什么叫数组的双排思想呢,说的就是数组里面不仅仅是元素,还有它的标号。通过标号来一个一个的寻找比较。
这个思想解释的比较好的有一个网站,这里罗列下:算法 3:最常用的排序--快速排序
#include <iostream>
int a[100],n;
using namespace std;
void quicksort(int left,int right);
int main()
{
  cin>>n;
  for(int i=0;i<n;i++) {
  cin>>a[i];
}
quicksort(0,n-1);
for(int i=0;i<n;i++) {
  cout<<a[i]<<" ";
}
return 0;
}
void quicksort(int left,int right)
{
  int i,j,temp,t;
  if(left<right) {
  return;
}
i=left;
j=right;
temp=a[left];
while(i!=j) {
while(temp>a[j]&&i<j) {
  j--;
}   
while(temp<a[i]&&i<j) {   i++; } t=a[j]; a[j]=a[i]; a[i]=t; } a[left]=a[i]; a[i]=temp; quicksort(left,i-1); quicksort(i+1;right); }
原文地址:https://www.cnblogs.com/xyqxyq/p/9297007.html