怎么样用ppt做网站,网站开发科技公司,广东上海专业网站建设公司排名,网站建设高端公司2019独角兽企业重金招聘Python工程师标准 一、直接插入排序#xff1a;是最简单的排序方法#xff0c;算法简单来说就是可以把第一个数a[0]看做有序数组#xff0c;那么a[1]要插入进来#xff0c;对比#xff0c;插入合适位置#xff1b;然后a[0],a[1]是有… 2019独角兽企业重金招聘Python工程师标准 一、直接插入排序是最简单的排序方法算法简单来说就是可以把第一个数a[0]看做有序数组那么a[1]要插入进来对比插入合适位置然后a[0],a[1]是有序数组插入a[2]就依次和a[0],a[1]比较并插入若a[2]需插在最前面那a[0],a[1]都要依次后移。。。以此类推。所以插入排序有很多比较及交换的过程。时间复杂度为O(n2)。下面是自己编的插入排序的代码很简单嗯 void InsertSort(int *a,int length) { int temp0; for(int i1;ilength;i) { for(int j0;ji;j) { if(a[i]a[j]) { tempa[i]; a[i]a[j]; a[j]temp; } } } } 二、希尔排序也是一种插入排序但是用简单的算法有了大的复杂度改进。简单来说就是设置了一个增量表K[]。比如有一个10个数字的数组需要排序的话可以把增量表设置成K[3]{5,3,1}。先以增量5排序就是把10个数字数组分区成为{R1R6};{R2R7};{R3R8};{R4R9};{R5R10}.区域内各自使用插入排序然后再以增量3排序最后一定要用增量1排序确认整体的顺序正确。这样可以因为小区域内的简单排序确保整个数组”基本有序“最后再进行一次校验校验的时候就不需要过多的交换而浪费时间。但是希尔排序的复杂度很难分析和增量序列也有关系。姑且记住当增量序列dlta[k]2t-k1-1时其复杂度为On3/2。 void ShellSort(int *array,int *dk,int length) { for(int i0;isizeof(dk);i) { ShellFastSort(array,dk[i],length); } } void ShellFastSort(int *a,int k, int len) { int temp; for(int i0;ik;i) { for(int jik;jlen;jk) { for(int mi;mj;mk) if(a[m]a[j]) { tempa[j]; a[j]a[m]; a[m]temp; } } } } 三、冒泡排序经典排序算法交换的思想。数与数依次比较大的就往后移第一趟排序能把最大的数交换到最后一个位置第二趟把第二大的数字交换到倒数第二的位置。。。时间复杂度还是On2. for(int jn;j0;j--) { for(int i1;ij;i) { if(array[i-1]array[i]){ temparray[i]; array[i]array[i-1]; array[i-1]temp; } } } 四、快速排序是对冒泡排序的改进思想简单来说一趟排序把数字分成大数字区域和小数字区域间隔点也就是所谓的“枢轴pivot“可任意选。通常把第一个数字作为枢轴划分成两个区域后再各自划分不断递归最后就剩两个或三个数字的区域就很简单就能排列出来了。不过代码还是稍微纠结了一下才写出来啊。。。栈的最大深度可降为Ologn void FastSort(int *a,int low,int high) { int pivotloc0; if(lowhigh){ pivotlocpartition(a,low,high); FastSort(a,low,pivotloc-1); FastSort(a,pivotloc1,high); } } int partition(int *a,int low,int high) { int pivotkeya[low],temp; while(lowhigh){ while(lowhigha[high]pivotkey){high--;} if(lowhigh) a[low]a[high]; while(lowhigha[low]pivotkey){low;} if(lowhigh) a[high--]a[low]; } return low; } 转载于:https://my.oschina.net/u/1475850/blog/221772