听其自然
2020年6月24日星期三
《啊哈算法》中说明的快速排序算法怀疑以前的快速排序算法是否真的很混乱。
看了百度“java快速排序”,出现的很多博客都和《啊哈算法》的走同样的路,我的疑问没有解开,有点失望。
很久以前就有人才从评论区出来,很有趣。 我看了这些博客的评论区域,果然是悲鸣。 好像只有我一个人感到困惑呢。
于是,我翻箱倒柜地找了以前课上做的笔记,用java说明了以前的算法。 总之以老师说的话为基准,以我过去学过的东西为基准吧。
1、快速排序思想快速排序的核心是分割,决定一个作为分割基准的数字,将原排列分割成两部分,左边的小于基准数字,右边的大于基准数字。
然后递归迭代,分别快速排序左部和右部两部分,知道整个数组很有序。
2、时间复杂度平均时间复杂度在o(n*logn )序列无序时良好
最差的时间复杂度在o(n^2)序列有序且逆序时最差
33558 www.Sina.com/public class quick sort {
公共int partition (int [ ] a,int low,int high ) {
//选择基准元素
int pivot=a[low];
wile(lowhigh ) (
wile(lowhigha[high]=pivot )--high; //首先从右到左,找出小于基准要素的第一个,将该要素填入左哨兵的位置
a[low]=a[high];
wile(lowhigha[low]=pivot ) low; //再从左到右,找出大于基准要素的第一个,将该要素填入右哨兵的位置
a[high]=a[low]; ()继续走,直到遇到右哨兵,周期结束
}
a[low]=pivot; //将基准要素置于相遇的位置
返回低;
}
公共void quick sort (int [ ] a,int low,int high ) {
if (低高) {
intpivotpos=partition(a,low,high );
quicksort(a,low,pivotpos-1 );
快速引导(a,pivotpos 1,high );
}
}
publicstaticvoidmain (string [ ] args ) {
int [ ] a={ 2,1,3,5,4,7,6 };
快速启动快速启动=new快速启动(;
quicksort.quicksort(a,0,6 )
for(intI=0; ia.length; I ) {
system.out.print(a[I] ' );
}
}
}