网站收录的页面被k出来,新产品营销策划,做旅游的网站的要素,比较好的室内设计网站利用三者取中法改进快速排序#xff0c;具体内容如下实现取数组中第一个,中间和最后一个元素的中间元素作为划分元素(否则将这些元素排除在划分过程之外).大小为11或更小的数组在划分过程中被忽略,然后使用插入排序来完成排序.#include #include #include #include #include #…利用三者取中法改进快速排序具体内容如下实现取数组中第一个,中间和最后一个元素的中间元素作为划分元素(否则将这些元素排除在划分过程之外).大小为11或更小的数组在划分过程中被忽略,然后使用插入排序来完成排序.#include #include #include #include #include #include using namespace std;#define OK 1#define ERROR -1#define TRUE 1#define FALSE 0typedef int Status;//输出函数void Print(int a[], int l, int r){int i;for(i l; i r; i){printf(%d , a[i]);}printf(\n);}//插入排序的改进void Insertion(int a[], int l, int r){int i, j;//循环找到数组中的最小值for(i r; i l; i--){if(a[i-1] a[i]){swap(a[i-1], a[i]);}}//由于上面的循环,a[0]a[1]已经有序for(i l2; i r; i){int temp a[i];j i;//此时a[j]的位置已被记录//while循环比较进行移位操作while(temp a[j-1]){a[j] a[j-1];j--;}//将记录下的值放到应当的位置a[j] temp;}}//划分函数int partion(int a[], int left, int right){//取最右边的元素作划分元素int temp a[right];//记录 i left, j rightint i left, j right-1;//循环直到左右指针相遇while(true){//从左边开始扫描,当出现比划分元素大的元素,扫描停止while(temp a[i]){i;}//从右边进行扫描,当出现比划分元素小的元素,扫描停止while(temp a[j] j left){j--;}//如果 i j, 循环截止,下面的交换不执行if(i j) break;//交换停止时的元素swap(a[i], a[j]);}//交换该元素与划分元素swap(a[i], a[right]);//printf(i %d\n, i);//Print(a, 0, 6);//划分过程结束return i;}void qsort(int a[], int left, int right){int i;if(right-left 10)return;swap(a[(leftright)/2], a[right-1]);if(a[left] a[right-1])swap(a[left], a[right-1]);if(a[left] a[right])swap(a[left], a[right]);if(a[right] a[right-1])swap(a[right-1], a[right]);i partion(a, left1, right-1);qsort(a, left, i-1);qsort(a, i1, right);}void Sort(int a[], int left, int right){qsort(a, left, right);Insertion(a, left, right);}int main(){int a[12] {2, 5, 3, 7, 6, 1, 4, 11, 8, 10, 9, 12};//快速排序改进printf(对0~11排序\n);Sort(a, 0, 11);Print(a, 0, 11);return 0;}以上就是本文的全部内容希望对大家的学习有所帮助也希望大家多多支持脚本之家。