数据结构快速排序题,各位好心人帮我个忙了! 不好意思,帮我解决这个问题吧!10、一组序列的关键码为:{28、19、27、49、56、12、10、25}要求:⑴ 利用快速排序的方法,写出以第一个记录为基准得到的一次划分结果; ⑵ 利用堆排序的方法,写出建立的初始大堆我 的(1)答案是:(12 19 25 10 27)28 (56 49) (2):我不会写 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 晕死 这个不是SQL内容吧 这个是应用程式方面的排序方法,不是sql 的专长。 呵呵, 这跟数学没关系, 有空翻翻数据结构, 不是很负责的算法。⑴ 利用快速排序的方法,写出以第一个记录为基准得到的一次划分结果;初始 left=0, right=7, key=0 28、19、27、49、56、12、10、25 <-- 从右往左找小于28的, 28跟25交换, key=right=71 25、19、27、49、56、12、10、28 --> 从左往右找大于28的, 28跟49交换, key=left=32 25、19、27、28、56、12、10、49 <-- 从右往左找小于28的, 28跟10交换, key=right=63 25、19、27、10、56、12、28、49 --> 从左往右找大于28的, 28跟56交换, key=left=44 25、19、27、10、28、12、56、49 <-- 从右往左找小于28的, 28跟12交换, key=right=55 25、19、27、10、12、28、56、49 <-- 从左往右找大于28的, 此时28左边的全部小于等于28, 右边的大于等于28, 划分完成因此第一此划分结果为(25、19、27、10、12、28、56、49) ⑵ 利用堆排序的方法,写出建立的初始大堆堆排序中的树的特性是:父节点一定大于其子节点。 28 19 27 49 56 12 10 251 49是最后一个有子节点的节点, 49大于25, 不交换2 前一个有子节点的是27, 27 大于 12 和10, 不交换3 节点19, 其两个子节点都比它大, 选择最大的56跟19交换, 此时堆变成 28 56 27 49 19 12 10 25 虽然发生了节点交换, 可是19没有子节点, 不对19进行重组 4 节点28, 其子节点56大于它, 28跟56交换, 此时堆变成 56 28 27 49 19 12 10 25 5 节点发生变化, 28因为有子节点, 要对28重新建堆处理, 其子节点49大于28 , 交换 56 49 27 28 19 12 10 25 6 节点发生变化, 28因为有子节点, 要对28重新建堆处理, 其子节点25小于28 , 不交换。因此初始堆是 (56,49 ,27,28,19,12,10,25) int[] scores=new int[8];//定义一个数组int temp;//定义一个变量(替换用的)/*给数组负值*/scores[0]=28;scores[1]=19;scores[2]=27;scores[3]=49;scores[4]=56;scores[5]=12;scores[6]=10;scores[7]=25;//开始排序for(int i=0;i<scores.length-1;i++){//控制比较多少轮 for(int j=0;j<scores.length-1-i;j++){//将最大的数字交换到最后 if(scores[j]>scores[j+1]){//比较前一个数和后一个数的大小 temp=scores[j];//交换数字 scores[j]=scores[j+1]; scores[j+1]=temp; } }}上面是冒泡排序,不知道是不是你要的~! ntext字段这么读取? MSSQL2008 EXPRESS 只能使用1G内存对IP20000的网站有多少影响? SQL2005 复制表 sqlserver2005问题急问,在线等 倒序生成行号的问题 请教一个显示问题,急。。。。 用批处理文件(.bat)执行sql server脚本 如何将主键表中的记录删除之后,外建表中的相应记录都删除? 高手进来帮忙看下,谢谢,急急急 关于用户DNS与系统DNS 这种设计,有必要升级到 sql 2k5 吗? access数据库当中区间怎么表示(如1到1.8)
初始 left=0, right=7, key=0
28、19、27、49、56、12、10、25 <-- 从右往左找小于28的, 28跟25交换, key=right=7
1 25、19、27、49、56、12、10、28 --> 从左往右找大于28的, 28跟49交换, key=left=3
2 25、19、27、28、56、12、10、49 <-- 从右往左找小于28的, 28跟10交换, key=right=6
3 25、19、27、10、56、12、28、49 --> 从左往右找大于28的, 28跟56交换, key=left=4
4 25、19、27、10、28、12、56、49 <-- 从右往左找小于28的, 28跟12交换, key=right=5
5 25、19、27、10、12、28、56、49 <-- 从左往右找大于28的, 此时28左边的全部小于等于28, 右边的大于等于28, 划分完成因此第一此划分结果为(25、19、27、10、12、28、56、49) ⑵ 利用堆排序的方法,写出建立的初始大堆
堆排序中的树的特性是:父节点一定大于其子节点。
28
19 27
49 56 12 10
251 49是最后一个有子节点的节点, 49大于25, 不交换2 前一个有子节点的是27, 27 大于 12 和10, 不交换3 节点19, 其两个子节点都比它大, 选择最大的56跟19交换, 此时堆变成 28
56 27
49 19 12 10
25
虽然发生了节点交换, 可是19没有子节点, 不对19进行重组
4 节点28, 其子节点56大于它, 28跟56交换, 此时堆变成
56
28 27
49 19 12 10
25
5 节点发生变化, 28因为有子节点, 要对28重新建堆处理, 其子节点49大于28 , 交换
56
49 27
28 19 12 10
25
6 节点发生变化, 28因为有子节点, 要对28重新建堆处理, 其子节点25小于28 , 不交换。因此初始堆是 (56,49 ,27,28,19,12,10,25)
int temp;//定义一个变量(替换用的)
/*给数组负值*/
scores[0]=28;
scores[1]=19;
scores[2]=27;
scores[3]=49;
scores[4]=56;
scores[5]=12;
scores[6]=10;
scores[7]=25;
//开始排序
for(int i=0;i<scores.length-1;i++){//控制比较多少轮
for(int j=0;j<scores.length-1-i;j++){//将最大的数字交换到最后
if(scores[j]>scores[j+1]){//比较前一个数和后一个数的大小
temp=scores[j];//交换数字
scores[j]=scores[j+1];
scores[j+1]=temp;
}
}
}
上面是冒泡排序,不知道是不是你要的~!