传统的排序算法有几种排序方式,下面介绍如何理解和实现冒泡排序和快速排序。 我记得太多了,很容易混乱。
1 )鼓泡排序)顾名思义,大数值从上到下排列,像水里的泡沫一样,从水底的某个位置向上冒出。
思想:
第一次:从数组的最左边开始,取第一个要素与第二个要素相比,小的放在前面,大的放在后面; 然后,将第2个元素与第3个元素比较,将大的出现在第3个位置,将小的出现在第2个位置,然后将第3个元素与第4个元素比较,第4和第5个比较,合计n-1次比较,最大的元素出现在最右边
第二次:从序列最左边开始,取第一个元素与第二个元素比较,小的放在前面,大的放在后面,第二个元素与第三个元素比较,大的放在第三个位置,小的放在第二个位置,还有第三个元素放在第四个位置
比较合计n-1次,如第3次、第4次、 (上述n均为排列长度) ) ) ) ) ) )。
气泡排序的时间复杂性: o(n^2) ) ) ) ) ) ) ) ) ) )。
泡沫排序的实现
测试
2 .快速排序
思想:第一次:取数组的第一个要素a[0],作为坐标值key。 (此时,a[0]被放入key中,a[0]的位置相当于空) ),所以从数组的最右边分别与key值进行比较,如果大于key值,则保持放在右边不动,一直进行比较,比key值更好如果遇到大于key值的东西,放在刚才右边的空位置。 然后,从刚放在右边的位置前面开始,分别与key值相比,大于key的放在不动的位置,小于key的放在左边的空位置。就这样往返,比较直到左右的相遇停止。 在遇到的位置输入key值(即a[0] )。 此时,左边的都是小于a[0]的值,右边的都是大于a[0]的值,相当于将数组在a[0]中分为[left,n-1]、[n 1,right]两个数组,n位置为
第二次:对上一次分割的两个序列[左,n-1]和[n 1,右],分别取第一个位置的值进行第一次比较的过程;
第三次:在第二次结束时,将两个数组拆分为四个数组,并分别停止,直到第一个位置取值进行第一次比较的每个进程数组的长度为1。 此时,各数组有保证。 右大于左时,大数组有序,拍顺序。
实现快速排序
测试
快速排序的思想有点绕圈子,要理解的话,我想还是多动脑子想想,理解起来比较简单。