快速排序

来源:互联网 发布:pixlr软件 编辑:程序博客网 时间:2024/06/04 19:12



未测试边界条件

#include <iostream>using namespace std;#define METOHD_1 0#define METOHD_2 0#define METOHD_3 1void swap(int &a, int &b){  int tmp = a;  a = b;  b = tmp;}int partition(int a[], int left, int right){#if METOHD_1  //取第一个元素作为枢纽元  int tmp = a[left];  int i = left;  int j = right;  while(i < j){    while(i < j && a[j] > tmp)      --j;    if (i < j){      a[i] = a[j];      ++i;    }        while(i < j && a[i] < tmp)      ++i;    if (i < j){      a[j] = a[i];      --j;    }  }  a[i] = tmp;  return i;#endif#if METOHD_2  //取最后一个元素作为枢纽元  int mid = left - 1;  for (int i = left; i < right; ++i){    if (a[i] < a[right]){      ++mid;      if (mid != i)        swap(a[mid], a[i]);    }  }  ++mid;  swap(a[mid], a[right]);  return mid;#endif#if METOHD_3  //取第一个元素作为枢纽元(最简便的方式)  int mid = left;  for (int i = left + 1; i <= right; ++i){    if (a[i] < a[left]){      ++mid;      if (mid != i)        swap(a[mid], a[i]);    }  }  swap(a[mid], a[left]);  return mid;#endif}void qsort(int a[], int left, int right){  if (left >= right)    return;  int mid = partition(a, left, right);  qsort(a, left, mid - 1);  qsort(a, mid + 1, right);}int main(){  int a[10] = {5, 9, 3, 4, 6, 1, 2, 0, 7, 8};  qsort(a, 0, 9);  for (int i = 0; i < 10; ++i)    cout << a[i] << endl;  //int a = 1; int b = 2;  //swap(a, b);  int ttt = 0;  return 0;}




参考 http://www.cnblogs.com/TenosDoIt/p/3665038.html


0 0
原创粉丝点击