C语言中 关于快速排序法的题目:关键码序列:(66,13,51,76,81,26,57,69,23)按照递增顺序排序,采用快速

作者&投稿:仇由柴 (若有异议请与网页底部的电邮联系)
C语言关键码序列 66 13 51 76 81 26 57 69 23 谁能给我解释一下答案,见详细,尤其是66怎么跑的~

快排实现的方式有很多种,上面这种实现方式是:
1.起止指针 low high,基准指针index 一开始指向最后一位元素.
2.先左边 low一直往右移,直到找到一个比index大的元素,low index交换.
3.high 左移,直到找到一个比index小的元素, high index 交换.
4.重复 2 3步 直到low = high.

void partition(int r[],int low=0,int high)//这里low是最低位,high是数组最高位的位置
{
int pivo;//这是基准值
pivo = r[low];
while(low<high)
{
while(low<high&&r[high]>=pivo)//从后面找满足大于基准值的数
{
high--;
}
r[row] = r[high];//不满足时就到了这个语句,把小于基准值的放前面去
while(low<high&&r[low]<=pivo)//从前面找小于基准值的数
{
low++;
}
r[high] = r[low];//不满足时就到这里把大于基准值的数放后面去
}
r[low] = pivo;//最后的位置就是放基准值的位置
}
//排序第一次完后应该是23,13,51,57,26,66,81,69,76

23,13,51,57,26,66 ,81 ,69,76


内蒙古自治区14780399367: 问一个关于快速排序的问题(C语言) -
延顾门冬: #include <iostream>#include <Windows.h> using std::cout; using std::endl; template< typename TYPE > void Swap( TYPE * a, TYPE * b ) { TYPE temp; temp = * a; * a = * b; * b = temp; } template< typename TYPE > void OutPut( TYPE * Num, int ...

内蒙古自治区14780399367: 用c语言解决快速排序算法,不用递归? -
延顾门冬: 自己构造一个栈,模拟递归的过程#define push2(A,B) push(B);push(A); void quicksort(a[],l,r) { int i; stackinit();push2(l,r); while(!stackempty()) { l=pop();r=pop(); if(r<=l) continue; i=partition(a,l,r) if(i-1>r-i){push2(l,i-1);push2(i+1,r);} else {pushi2(i+1;r);push2(l,i-1);} } }

内蒙古自治区14780399367: C语言中快速排序法是怎么用的,请给个例子进行说明?如题 谢谢了 -
延顾门冬: 有冒泡,插入,沉淀等方法. 我给你一个冒泡的给你参考: #include "stdio.h" main() { int a[10]; int i,j,t; printf("输入1-100之间的10个数:"); for(i=0;i<10;i++) scanf("%d",a[i]); for(i=0;i<10;i++) for(j=0;j<10-i;j++) if(a[j]>a[j+1]) {t=a[j+1];a[j+1]=a[j];a[j]=t;} for(i=0;i<10;i++) printf("%d",a[i]); }记得采纳啊

内蒙古自治区14780399367: 用C语言编写一个快速排序算法 输入10个数 -
延顾门冬: 代码如下: #include <stdio.h> #define N 10 void quickSort(int *arr,int l,int r) {//此处编写代码实现快速排序 int i,j,x,temp; if(l<r) { i=l; j=r; x=arr[(l+r)/2]; //以中间元素为轴 while(1) { while(i<=r&&arr[i]<x)i++; while(j>=0&&arr[j]>x)j--; if(i>=j) //相遇则跳出 ...

内蒙古自治区14780399367: 快速排序算法的C语言代码,要求有运行过程即每运行一步就输出一次结果 -
延顾门冬: #include#define Swap(a,b) {a^=b;b^=a;a^=b;}#define MAXN 1000int A[MAXN],N;int PRINT(int s=-1,int t=N,int x=0){ for(int i...

内蒙古自治区14780399367: 用C语言编程实现快速排序算法 -
延顾门冬: 给个快速排序你参考参考 /********************** 快速排序 **************************** 基本思想:在待排序的n个记录中任取一个记录(通常取第一个记录), 以该记录为基准,将当前的无序区划分为左右两个较小的无 序子区,使左边的记录均小于基...

内蒙古自治区14780399367: C语言快速排序比较次数问题 -
延顾门冬: 快速排序是先找到一个轴值,比较时把所有比轴值小的放到轴值的左边, 比轴值大的放到右边,再在两边各自选取轴值再按前面排序,直到完成 (1)已经排序完成,是最快的; (2)反序,需要将小于5的转移到5的左边,大于5的转移到5的右边,每个数都要经过比较,所以是最慢的 (3)轴值为9,需要将9右边的转移到左边,比较次数介于(1),(2)之间; (4)轴值为5,需要将左边的9转移到5的右边,3转移到5的左边; 总体比较次数(1)

内蒙古自治区14780399367: C语言排序的方法 -
延顾门冬: 现在流行的排序有:直接插入排序、冒泡排序、简单选择排序、希尔排序、快速排序、堆排序、归并排序、基数排序.对n个记录进行选择排序的方法是:通过n-i次关键字之间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1<=i<=n)...

内蒙古自治区14780399367: 快速排序算法的C语言代码,要求有运行过程即每运行一步就输出一次结果 -
延顾门冬: #include<cstdio> #define Swap(a,b) {a^=b;b^=a;a^=b;} #define MAXN 1000 int A[MAXN],N; int PRINT(int s=-1,int t=N,int x=0) { for(int i=0;i<N;++i) { if(i==s)printf("{"); printf("%d",A[i]); if(i==t)printf("}");printf(" "); } if(!(s==-1&&t==N))printf("\...

内蒙古自治区14780399367: C语言排序问题 将所有的数字从小到大的顺序排序(快排) -
延顾门冬: //这里的 copm为什么不带参数列表呢? 只需要把比较函数的地址传过去就可以了,而参数因为规定了必须是const void *类型,所以就没有必要重复了 // 还有这里传的两个指针参数 指针参数用来定位需要比较的两个元素,排序就涉及到比较,比...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网