五大排序
讲插入排序、选择排序、冒泡排序、快速排序和归并排序。
Alice-柯
程序媛
展开
-
冒泡排序及如何优化
1.冒泡排序 (1)第一趟 {3,4,1,5,2} a[0]和a[1]比,a[1]大,因此不用动。 {3,1,4,5,2} a[1]和a[2]比,a[1]大,因此互换。 {3,1,4,5,2} a[2]和a[3]比,a[3]大,因此不用动。 {3,1,4,2,5} a[3]和a[4]比,a[3]大,因此互换。 (2)第二趟 {1,3,4,2,5} a[0]和a[1]比,a[0]大,因此互换。 {1,3,4,2,5} a[1]和a[2]比,a[2]大,因此不用动。 {1,3,2,4,5} a[2]和a[3]比原创 2021-08-10 08:14:59 · 132 阅读 · 0 评论 -
选择排序实现
选择排序 选择排序每回从还没排序的数组中选出最小值与当前排序到的那一位数组进行交换,重复n(数组长度)词即可排序完。 | A[1] | …… | A[i] | A[i+1] | …… | A[n] A[1]~A[i-1]为已完成排序部分 从[i,n]中选出最小值和A[i]交换 void selectsort(){ for(int i=0;i<n;i++){ int k=i; for(int j=i;j<n;j++){ if(A[j]<A[k]){ k=j; }原创 2021-08-10 08:14:05 · 106 阅读 · 0 评论 -
插入排序实现
插入排序 让第i项从第1~i-1位进行枚举,找到某个位置j,将a[i]插入j位置中,重复n-1(n是数组长度)次即可。 注意,|前为已排序,|后为待排序,下表从1开始。 {3 | 5,2,4,1} (1)第一趟 a[2](5)应插入2号位 {3,5 | 2,4,1} (2)第二趟 a[3](2)应插入1号位 {2,3,5 | 4,1} (3)第三趟 a[4](4)应插入3号位 {2,3,4,5 | 1} (4)第四趟 a[5](1)应插入1号位 {1,2,3,4,5} void insertsort(原创 2021-08-10 08:13:17 · 128 阅读 · 0 评论 -
归并排序实现
归并排序 归并排序是一种基于“归并”思想的排序方法,我主要介绍一下2-路归并排序。 原理是将序列两两分组,组内单独排序,再将这些组两两归并,组内再次排序,直到组内只剩下一个组位置。 下面来看一个例子 将数组排序{3,44,38,5,47,15,36,26} (1)第一趟 两两分组,得到四组 {3,44}{38,5}{47,15}{36,26} 将每组排序后得到: {3,44}{5,38}{15,47}{26,36} (2)第二趟 将两个组合并为一个组,得到两个大组 {{3,44}{5,38}}{{15,47原创 2021-08-10 08:12:22 · 316 阅读 · 0 评论 -
快速排序实现
快速排序 快速排序是冒泡排序的一种改进,也属于交换排序,通过元素之间的比较和交换位置来达到排序的目的。 但是冒泡排序再每一轮只把一个元素冒泡到竖列的一段,而快速排序再每一轮挑选一个基准元素,并让其他比它大的元素移动到数列的一旁,从而把数列拆成了两个部分。 挖坑法 顾名思义,挖坑发就是从右边取一个基准值用于比较数的key,取走的这个数的位置就成为了一个坑,再左边找比key大的数,然后再将这个数填在刚才取走的数的位置。 左右指针法 (1)取一个关键字key作为枢轴,一般取第一个数/最后一个数。 (2)设置两个变原创 2021-08-10 08:11:13 · 148 阅读 · 0 评论