排序算法--1

    xiaoxiao2021-08-18  93

    排序算法–1

    - 快速排序

    先上源代码


    void sort (int a[30], int left, int right) { int i=left; int j=right; int key=a[left]; if (left >= right) { return ; } while(i < j) { while (i< j && key <= a[j]) { j--; } a[i] = a[j]; while(i < j && key >= a[i]) { i++; } a[j] = a[i]; } a[i] = key; sort(a, left, i-1); sort(a, i + 1, right); }

    先找一个基准点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,即只剩一个数的时候,快速排序实际上就进行完了。

    一开始不是很理解为啥可以直接赋值呢【笑哭】,后来,我看到了这个图:

    这里看到那两个图的,这个大大还把快排改良了,可惜我现在还没看懂…

    对!开始的时候把基准点拿出来保存好,这样里面就空了一个位置,可以把值赋来赋去而且不用担心数据丢失!

    其实快排的思路还是蛮简单的,就是找基准点的位置(把前后分开的位置),然后再找再找,找着找着就排完序了【笑哭】。唯一懵逼的就是那个赋值的事情…这个样子的话,快排算是搞懂了^_^。

    希望…自己表达清楚了哈!

    转载请注明原文地址: https://ju.6miu.com/read-676592.html

    最新回复(0)