首页 > 编程知识 正文

十大经典排序算法(动图演示),简单选择排序图解

时间:2023-05-06 14:13:37 阅读:21425 作者:760

写在前面:

你好,我是时候了。

今天给您排序算法的快速排序。

用图解说明,努力写得很彻底。 当然,开始吧!

思维导图:

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详细信息

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。