首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

快速排序小结

2012-09-07 
快速排序总结1. 随机数做Pivot#include iostream#include ctimevoid swap(int* a, int* b){if (a b

快速排序总结
1. 随机数做Pivot

#include <iostream>#include <ctime>void swap(int* a, int* b){if (a == b)return;*a = *a ^ *b;*b = *a ^ *b;*a = *a ^ *b;};int partition(int* a, int left, int right){int pivot = (left + right) / 2;//Median from 3 numbersif (a[left] > a[pivot])swap(&a[left], &a[pivot]);if (a[left] > a[right])swap(&a[left], &a[right]);if (a[pivot] > a[right])swap(&a[pivot], &a[right]);swap(&a[pivot], &a[right]);int front = left;int curIdx = left;while (curIdx < right){if (a[curIdx] < a[right])swap(&a[curIdx], &a[front++]);curIdx++;}swap(&a[front], &a[right]);return front;};void quickSort(int* a, int left, int right){if (left < right){int pivot = partition(a, left, right);quickSort(a, left, pivot - 1);quickSort(a, pivot + 1, right);}};int main(){int a[10] = {10, 9, 8, 7, 6, 55, 11, 5, 3, 2};quickSort(a, 0, sizeof(a) / sizeof(int) - 1);return 0;}


热点排行