- 快速排序
先上源代码
先找一个基准点key
从后面向前面找,找到一个比它小的a[j],就把a[j]放到a[i]的位置,这个时候不用担心数据被覆盖的问题,因为在一开始,a[i]保存在key里面了
int key=a[left];之后,再正向找,找到后,依旧直接赋值;直到i=j
这个时候,a[i]这个位置就会空出来,自然就可以将key赋到这个位置了,而此时的a[i]左边全部是比它小的,右边比它大,第一轮排序就结束了。
再分别对a[i]左右的数进行这样的操作,直到left==right,即只剩一个数的时候,快速排序实际上就进行完了。
一开始不是很理解为啥可以直接赋值呢【笑哭】,后来,我看到了这个图:
这里看到那两个图的,这个大大还把快排改良了,可惜我现在还没看懂…
对!开始的时候把基准点拿出来保存好,这样里面就空了一个位置,可以把值赋来赋去而且不用担心数据丢失!
其实快排的思路还是蛮简单的,就是找基准点的位置(把前后分开的位置),然后再找再找,找着找着就排完序了【笑哭】。唯一懵逼的就是那个赋值的事情…这个样子的话,快排算是搞懂了^_^。
希望…自己表达清楚了哈!