写在前面:
你好,我是时候了。
今天给您排序算法的快速排序。
用图解说明,努力写得很彻底。 当然,开始吧!
思维导图:
1 )快速排序概念将待排序的记录分为两个单独的部分,一个记录的关键字小于另一个记录的关键字,可以继续分别对这两个记录进行排序,使整个序列排序主要采用分而治之和挖坑填补的方法,分而治之就是把大问题分解成小问题,把小问题堆积起来解决大问题。
2、算法思路我们先搞清楚这个积累的思路,先搞清楚逻辑,不着急写代码。
首先有无序的排列。 例如
int [ ] arr={ 4,2,8,0,5,7,1,3,9 }; 2.1、第一步取基准数基准数(轴心),取数组的第一个元素。 此时,基准数: arr[0]=4
并且,定义为两个变量I和j分别指向无序排列的第一个要素start和最后的要素end。
//开始int i=start; int j=end; //取得基准数int temp=arr[start]; 2.2、第二步,分割过程的分割过程,大于基准数的数都放在其右边,小于或等于基准数的数都放在其左边。
首先,将第一个元素arr[0]=4定义为基准元素。 此时,数组的第一个位置是坑。 在中,从数组的右向左查找小于基准数的元素,并交换坑和位置。
while(ij ) (/从右向左小于基准数的while ) ijarr[j]=temp ) j----; (/)判断相等,基坑if(ij ) ) { arr[i]=arr[j]; I; }更改位置后,现在转换,从数组的左向右查找大于基准数的元素。
while(ij ) (/从右向左小于基准数的while ) ijarr[j]=temp ) j----; (/)判断相等,基坑if(ij ) ) { arr[i]=arr[j]; I; //从左到右大于基准数的while(IJarr[I]temp ) I; (/)判断相等,基坑if(ij ) ) { arr[j]=arr[i]; j----; }改变位置后,从数组的右向左,开始寻找小于基准数的元素。
将这些操作分为左右分区,重复进行直到将基准数填充到坑中,完成第一次排序。 如下所示。
//将基准数设定为i=j的位置arr[i]=temp; 2.3、步骤3、对两个区间重复分区操作,其中,对划分出的两个区间重复上述分区操作,直到各区间只有一个要素。
重复以上操作,直到左右分区排列有序,整个排序过程完成。
//左半部分快速排序快速排序(arr,start,i-1 ); //右半部分快速排序快速排序(arr,i 1,end ); 3、完整代码import java.util.Arrays; public class quick _ sort { publicstaticvoidmain (string [ ] args ) int [ ] arr=new int [ ] { 4,2,8,0,5,7,1,3 } }公共静态int [ ] quick sort (int [ ] arr,int start,int end )//开始int i=start; int j=end; //取得基准数int temp=arr[start]; //ij为循环条件if(ij ) ) while(ij ) ) /小于基准数的while ) IJARR[j]=temp ) j----; (/)判断相等,基坑if(ij ) ) { arr[i]=arr[j]; I; //从左到右大于基准数的while(IJarr[I]temp ) I; (/)判断相等,基坑if(ij ) ) { arr[j]=arr[i]; j----; //将基准数设定为i=j的位置arr[i]=temp; //左半部分快速排序快速排序(arr,start,i-1 ); //右半部分快速排序快速排序(arr,i 1,end ); }返回arr; ) 4、算法分析4.1、时间复杂度快速排序的最差时间复杂度为o(n^2),最高时间复杂度为o ) nlogn,因此平均时间复杂度最终也计算为o ) nlogn。
4.2、空间复杂度空间复杂度为o(1)。 因为不使用额外开放的集合空间。
4.3、算法稳定性快速排序为不稳定的排序算法。 因为不能保证相同的数据会按顺序扫描并按顺序存储。
最差的时间复杂度是o(n^2),最高的时间复杂度是o ) nlogn ),因此平均时间复杂度也最终被计算为o ) nlogn。
4.2、空间复杂度空间复杂度为o(1)。 因为不使用额外开放的集合空间。
4.3、算法稳定性快速排序为不稳定的排序算法。 因为不能保证相同的数据会按顺序扫描并按顺序存储。
5、其他排序算法的累计排序:全面图解累计排序
合并排序:全面图解合并排序
6、基本数据结构链表:
数组和链表
顺序表
单链表
堆栈:
堆栈的顺序存储、
堆栈的链式存储
二叉树:
二叉树递归扫描
二叉树的非递归遍历
混叠映射:
HashMap数据结构详细信息
Java收藏:
ArrayList详细信息