快速排序

来源:互联网 发布:mac os x 10.12 beta2 编辑:程序博客网 时间:2024/06/15 01:02
#include<iostream>using namespace std;int getMid(int data[], int start,  int end){int mid = (start + end) / 2;if (data[start] > data[mid]){if (data[mid] > data[end])return mid;else if (data[start] > data[end])return end;elsereturn start;}else{if (data[mid] < data[end])return mid;else if (data[start] < data[end])return end;else return start;}}int partition(int data[], int start, int end){int mid = getMid(data, start, end);int temp = data[mid];data[mid] = data[start];data[start] = temp;mid = start;int i = start + 1;int j = end;while (i < j){if (data[i] < temp) ++i;if (data[j] > temp) --j;if (data[i] >= temp&&data[j] <= temp){data[i] = data[i] + data[j];data[j] = data[i] - data[j];data[i] = data[i] - data[j];++i;--j;}}if (i = j){temp = data[i];data[i] = data[start];data[start] = temp;}if (i > j){--i;temp = data[i];data[i] = data[start];data[start] = temp;}return i;}void quickSort(int a[], int start, int end){if (start == end) return;int par = partition(a, start, end);if (par<start||par>end) return;quickSort(a, start, par - 1);quickSort(a, par + 1, end);}int main(){int length = 0;while (cin >> length){int*a = new int[length];for (int i = 0; i < length; ++i)cin >> a[i];quickSort(a, 0, length - 1);for (int j = 0; j < length; ++j){if (j != length - 1){cout << a[j] << " ";}else{cout << a[j];}}}system("pause");return 0;}

0 0
原创粉丝点击