快速排序基本思路(通俗易懂+例子)
https://blog.csdn.net/code_AC/article/details/74158681
快速排序
今天看到大神寫的一篇快速排序的博客,肅然起敬,覺得原來快速排序這么簡(jiǎn)單
下面進(jìn)行簡(jiǎn)單的試試
快速排序的基本思想是
1、先從數(shù)列中取出一個(gè)數(shù)作為基準(zhǔn)數(shù)
2、分區(qū)過程,將比這個(gè)數(shù)大的數(shù)全放到它的右邊,小于或等于它的數(shù)全放到它的左邊
3、再對(duì)左右區(qū)間重復(fù)第二步,直到各區(qū)間只有一個(gè)數(shù)
概括來說為 挖坑填數(shù)+分治法
下面舉例來進(jìn)行說明,主要有三個(gè)參數(shù),i為區(qū)間的開始地址,j為區(qū)間的結(jié)束地址,X為當(dāng)前的開始的值
第一步,i=0,j=9,X=21
0
1
2
3
4
5
6
7
8
9
21
32
43
98
54
45
23
4
66
86
第二步,從j開始由,后向前找,找到比X小的第一個(gè)數(shù)a[7]=4,此時(shí)i=0,j=6,X=21
進(jìn)行替換
0
1
2
3
4
5
6
7
8
9
4
32
43
98
54
45
23
21
66
86
第三步,由前往后找,找到比X大的第一個(gè)數(shù)a[1]=32,此時(shí)i=2,j=6,X=21
0
1
2
3
4
5
6
7
8
9
4
21
43
98
54
45
23
32
66
86
第四步,從j=6開始由,由后向前找,找到比X小的第一個(gè)數(shù)a[0]=4,此時(shí)i=2,j=0,X=21,發(fā)現(xiàn)j<=i,所以第一回結(jié)束
可以發(fā)現(xiàn)21前面的數(shù)字都比21小,后面的數(shù)字都比21大
接下來對(duì)兩個(gè)子區(qū)間[0,0]和[2,9]重復(fù)上面的操作即可
下面直接給出過程,就步詳細(xì)解說了
i=2,j=6,X=43
0
1
2
3
4
5
6
7
8
9
4
21
43
98
54
45
23
32
66
86
i=4,j=6,X=43
0
1
2
3
4
5
6
7
8
9
4
21
32
98
54
45
23
43
66
86
i=4,j=5,x=43
0
1
2
3
4
5
6
7
8
9
4
21
32
43
54
45
23
98
66
86
i=5,j=5,x=43
0
1
2
3
4
5
6
7
8
9
4
21
32
23
43
45
54
98
66
86
然后被分為了兩個(gè)子區(qū)間[2,3]和[5,9]
…最后排序下去就是最終的答案
0
1
2
3
4
5
6
7
8
9
4
21
23
32
43
45
54
66
86
98
總結(jié):
1.i =L; j = R; 將基準(zhǔn)數(shù)挖出形成第一個(gè)坑a[i]。
2.j–由后向前找比它小的數(shù),找到后挖出此數(shù)填前一個(gè)坑a[i]中。
3.i++由前向后找比它大的數(shù),找到后也挖出此數(shù)填到前一個(gè)坑a[j]中。
4.再重復(fù)執(zhí)行2,3二步,直到i==j,將基準(zhǔn)數(shù)填入a[i]中。
?
總結(jié)
以上是生活随笔為你收集整理的快速排序基本思路(通俗易懂+例子)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python读写文件的语句_用Pytho
- 下一篇: vmware 安装 黑群晖