/**************************************************************************************** 算法: 1、先以数组的第一个数据作为参考,然后从右边开始--逐个比较。 2、如果比较之后不符合排序,那么交换它们2个的数据,然后此时右边的数据成为参考。 3、从左边开始--逐个比较,如果比较之后不符合排序,交换它们2个的数据,然后左边的数据成为参考。 4、采用递归思想不断循环直至排序完成。 ****************************************************************************************/ #include <iostream> using namespace std; void Swap(int *elem_1, int *elem_2) { int temp = *elem_1; *elem_1 = *elem_2; *elem_2 = temp; } void Quick_Sort(int *array,int start_index,int end_index) { int front_index = start_index; int rear_index = end_index; while(front_index < rear_index) { for(;array[front_index] <= array[rear_index] && front_index < rear_index;) rear_index--; if(front_index < rear_index) Swap(array+front_index,array+rear_index); for(;array[front_index] < array[rear_index] && front_index < rear_index;) front_index++; if(front_index < rear_index) Swap(array+front_index,array+rear_index); } if( front_index - start_index > 0) Quick_Sort(array,0,front_index - 1); if( end_index - rear_index > 0) Quick_Sort(array,rear_index + 1,end_index); } int main(void) { int array[10]={4,9,7,0,3,1,5,8,2,6}; Quick_Sort(array,0,9); for(int i=0; i<10; i++) cout<<array[i]<<" "; cout<<endl; return 0; }
原文:http://blog.csdn.net/li_jun_09_05/article/details/23717503