随笔分类 - 排序
重复值判断练习题
摘要:请设计一个高效算法,判断数组中是否有重复值。必须保证额外空间复杂度为O(1)。 给定一个int数组A及它的大小n,请返回它是否有重复值。 测试样例:[1,2,3,4,5,5,6],7 返回:true 因为这道题对空间复杂度有要求,所以想用非递归堆排序。 #include <iostream> #in
阅读全文
小范围排序
摘要:已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离可以不超过k,并且k相对于数组来说比较小。请选择一个合适的排序算法针对这个数据进行排序。给定一个int数组A,同时给定A的大小n和题意中的k,请返回排序后的数组。测试样例:[2,1,4,3,6,5,8,7,10,9],1
阅读全文
堆排序
摘要:堆排序基本思想(最大堆): 1. 将初始待排序关键字序列(R1,R2....Rn)构建成最大堆,此时堆为初始的无序堆; 2. 将堆顶元素R[1]与最后一个元素R[n]交换,此时得到新的无序区(R1,R2,......Rn-1)和新的有序区(Rn),且满足R[1,2...n-1]<=R[n]; 3.
阅读全文
基数排序
摘要:基数排序的基本思想: 原理类似桶排序,这里总是需要10个桶,多次使用 首先以个位数的值进行装桶,即个位数为1则放入1号桶,为9则放入9号桶,暂时忽视十位数 然后再以十位的值进行装桶 最后在以百位的值进行装桶 这样倒出的值为011 014 023 072 084 101 对于一个int数组,请编写一个
阅读全文
计数排序
摘要:基数排序基本思想:计数排序是一个类似于桶排序的排序算法,其优势是对已知数量范围的数组进行排序。它创建一个长度为这个数据范围的数组C,C中每个元素记录要排序数组中对应记录的出现个数。 对于上述例子,认为人的身高在100cm--300cm之间,然后建立200个桶(pail),桶中存的是对应元素的个数,即
阅读全文
归并排序
摘要:归并排序基本原理:对于给定的一组元素,首先将每两个相邻的长度为1的子序进行归并,得到(n/2)个长度为2或1的有序子序列,再将其两两归并,反复执行其过程,直到得到一个有序序列为止。 值得注意的是:在处理合并两个[]的时候,需要创建一个临时数组aux来保存A。还有边界条件的问题:第一个[]中的元素都处
阅读全文
插入排序
摘要:插入排序基本原理:对于给定的一组元素,初始时假设第一元素自成一个有序序列,其余的元素为无序序列,其余的元素为无序序列; 接着从第二个元素开始,按照记录的大小依次将当前处理的元素插入到其之前的有序序列中,直到最后一个元素插入到有序序列中为止。 数组{38,65,97,76,13,27,49} 第一趟排
阅读全文
选择排序
摘要:选择排序的基本思想:对于给定的一组元素,经过第一轮比较后得到最小的元素,然后将该元素与第一个元素的位置进行交换,接着对不包括第一个元素以外的其他记录进行第二轮比较,得到最小的元素并与第二个位置交换,重复该过程,直到进行比较的元素只有一个为止。 数组{38,65,97,76,13,27,49} 第一趟
阅读全文
冒泡排序
摘要:冒泡排序的基本思想就是对于给定的n个元素,从第一个元素开始,依次对相邻的两个元素进行比较,当前面的元素大于后面的元素时,交换其位置,进行一轮比较和换位后,n个元素中最大的数将位于第n位,然后对前(n-1)个元素进行第二轮比较,重复该过程,直到进行比较的元素只剩下一个。 数组{36,25,48,12,
阅读全文
浙公网安备 33010602011771号