呃,有点尴尬,前两天写完之后没保存,吃鸡的时候电脑卡了,直接强制关机,然后就凉凉····
这个专题总的来说还算简单,无论你是用c++的qsort模板,还是自己写sort函数,其实难的都不是排序的问题,关键是数据的处理,这个就只能通过大量的刷题来提高了。
(这个总结隔的时间有点久,忘了要写什么了··)
还有就是关于qsort源码的理解,有这样一道题 就是给你一串字符串让你对其中是字母的字符进行排序,其余字符位置不变。
问题就是 为什么在cmp中直接进行判断,如果是字母进行比较,不是则位置不变。
然后我去找了qsort的源码分析
http://blog.csdn.net/gen_ye/article/details/52880461
下面是聊天记录, 懒得再写了
qsort 源码里面 用了两种排序
一种是选择排序 一种是那个快速排序
他们的使用是由数组的大小决定的
然后就是关于为何在cmp中进行判断 无法得到想要的结果的问题
在选择排序中,对数组中的每个元素进行遍历找到最大的, 所以在这中间要不断的进行比较和交换
但是如果你在cmp加入判断函数的话,那么那些不在判断之内的值就无法进行交换 也就是说 把你整个数组隔断了, 打个比方 :
ABC12BAC
前面的字母根本无法与后面的字母进行比较, 因为在中间有数字, 无法满足判断关系, 位置无法移动
再对快速排序来说
qsort里面其实用的不是平常的二分法 他用的是三路划分, 不过原理一样,就是对极端值优化了一下
排序专题就这样吧,以后有机会再补充,这周作业还没写完,告辞
一种是选择排序 一种是那个快速排序
他们的使用是由数组的大小决定的
然后就是关于为何在cmp中进行判断 无法得到想要的结果的问题
在选择排序中,对数组中的每个元素进行遍历找到最大的, 所以在这中间要不断的进行比较和交换
但是如果你在cmp加入判断函数的话,那么那些不在判断之内的值就无法进行交换 也就是说 把你整个数组隔断了, 打个比方 :
ABC12BAC
前面的字母根本无法与后面的字母进行比较, 因为在中间有数字, 无法满足判断关系, 位置无法移动
再对快速排序来说
qsort里面其实用的不是平常的二分法 他用的是三路划分, 不过原理一样,就是对极端值优化了一下
排序专题就这样吧,以后有机会再补充,这周作业还没写完,告辞