排序算法合集
由于时间原因,我在复习的时候只写了核心部分.大家有需要可以自己补充完整调试.
public class SelectSort //选择排序 { public static int[] selectSort(int[] a) { int n = a.length; for (int i = 0; i < n - 1; i++) { int min = i; for (int j = i + 1; j < n; j++) { if (a[min] > a[j]) min = j; } //交换 int temp = a[i]; a[i] = a[min]; a[min] = temp; } return a; } }//插入排序 public class InsertSort { public static int[] insertSort(int[] arr) { if(arr == null || arr.length < 2) return arr; int n = arr.length; for (int i = 1; i < n; i++) { int temp = arr[i]; int k = i - 1; while(k >= 0 && arr[k] > temp) k--; //腾出位置插进去,要插的位置是 k + 1; for(int j = i ; j > k + 1; j--) arr[j] = arr[j-1]; //插进去 arr[k+1] = temp; } return arr; } }//冒泡排序法 public class BubbleSort { public static int[] bubbleSort(int[] arr) { if (arr == null || arr.length < 2) { return arr; } int n = arr.length; for (int i = 0; i < n; i++) { boolean flag = true; for (int j = 0; j < n -i - 1; j++) { if (arr[j + 1] < arr[j]) { flag = false; int t = arr[j]; arr[j] = arr[j+1]; arr[j+1] = t; } } //一趟下来是否发生位置交换 if(flag) break; } return arr; } }void BubbleSort(int array[], int len)//冒泡的其他实现方法 { int i = 0; int j = 0; int exchange = 1; for (i = 0; (i < len) && exchange; i++) { exchange = 0; for (j = len; j > 1; j--) { if (array[j] < array[j - 1]) { swap(array, j, j - 1); exchange = 1; } } } }//希尔排序 public class ShellSort { public static int[] shellSort(int arr[]) { if (arr == null || arr.length < 2) return arr; int n = arr.length; // 对每组间隔为 h的分组进行排序,刚开始 h = n / 2; for (int h = n / 2; h > 0; h /= 2) { //对各个局部分组进行插入排序 for (int i = h; i < n; i++) { // 将arr[i] 插入到所在分组的正确位置上 insertI(arr, h, i); } } return arr; } /** * 将arr[i]插入到所在分组的正确位置上 * arr[i]] 所在的分组为 ... arr[i-2*h],arr[i-h], arr[i+h] ... */ private static void insertI(int[] arr, int h, int i) { int temp = arr[i]; int k; for (k = i - h; k > 0 && temp < arr[k]; k -= h) { arr[k + h] = arr[k]; } arr[k + h] = temp; } }//归并排序 //A数组和B数组归并为C数组 void Merge(int src[], int des[], int low, int mid, int high)//src[]数组首地址,des[]拷贝目的地,A数组的前面,中间, {//B数组的前面 high后面 int i = low; int j = mid + 1;//赋值过程,就是相当于让前面的去操作了 int k = low; while ((i < mid) && (j <= high)//把小的放在目的地中 { if (src[i] < src[j]) { des[k++] = src[i++]; } else { des[k++] = src[j++]; } } while (i <= mid)//如果A还剩下几个尾部元素 { des[k++] = src[i++]; } while (j <= mid)//如果B还剩下几个尾部元素 { des[k++] = src[j++]; } } //调用子序列 //每次分为2路,当只剩下一个元素时,就不需要在划分, void MSort(int src[], int des[], int low, int max, int high) { if (low == high)//只有一个元素,不需要归并 { des[low] = src[low]; } else//多个元素开始进行划分 { int mid = (low + high) / 2; int*space = (int*)malloc(sizeof(int)*max); //递归进行2路划分,递归划分结束,开始归并操作 if (space != NULL) { Msort(src, space, low, mid, max); Msort(src, space, mid+1,high, max); Merge(src, space, low, mid, high);//调用归并函数进行归并 } free(space); } } void MergeSort(int array[], int len) { Msort(array, array, 0, len - 1, len); }//堆排序 //是树形选择排序方法,类似于完全二叉树的顺序存储结构,利用孩子节点和双亲节点的关系索引 var len; // 因为声明的多个函数都需要数据长度,所以把len设置成为全局变量 function buildMaxHeap(arr) { // 建立大顶堆 len = arr.length; for (var i = Math.floor(len/2); i >= 0; i--) { heapify(arr, i); } } function heapify(arr, i) { // 堆调整 var left = 2 * i + 1, right = 2 * i + 2, largest = i; if (left < len && arr[left] > arr[largest]) { largest = left; } if (right < len && arr[right] > arr[largest]) { largest = right; } if (largest != i) { swap(arr, i, largest); heapify(arr, largest); } } function swap(arr, i, j) { var temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } function heapSort(arr) { buildMaxHeap(arr); for (var i = arr.length - 1; i > 0; i--) { swap(arr, 0, i); len--; heapify(arr, 0); } return arr; }//基数排序 var counter = []; function radixSort(arr, maxDigit) { var mod = 10; var dev = 1; for (var i = 0; i < maxDigit; i++, dev *= 10, mod *= 10) { for(var j = 0; j < arr.length; j++) { var bucket = parseInt((arr[j] % mod) / dev); if(counter[bucket]==null) { counter[bucket] = []; } counter[bucket].push(arr[j]); } var pos = 0; for(var j = 0; j < counter.length; j++) { var value = null; if(counter[j]!=null) { while ((value = counter[j].shift()) != null) { arr[pos++] = value; } } } } return arr; }
排序算法远远不止上面这些,目前我也用不到更复杂的算法,所以就没去研究.只过一下这些常规的算法
港珠澳大桥通车,交响曲梦桥唱片正式发行并上线网易云2018年10月24日,今天是跨世纪工程港珠澳大桥通车的重要时刻。举世瞩目的港珠澳大桥历时十三年的建设,长达55公里的跨海大桥,7公里的海底7公里海底隧道。同时也是著名作曲家方岽清
FILECOIN上线一周年,全网存储已突破12EIB10月15日,是Filecoin上线一周年,也是Filecoin网络生态的第二次减产,当前全网存储容量已突破12EiB。FILECOIN上线一周年,全网存储已突破12EIB根据Fi
比特大陆停止蚂蚁矿机向中国大陆的输入自中国针对加密货币交易和采矿业务的监管通知文件公布后,各大交易所矿池及矿商逐渐发布公告,退出中国市场的同时暂停向中国大陆用户提供加密货币行业相关业务和服务。比特大陆停止蚂蚁矿机向中
DAC数模转换芯片介绍(AKM公司的解码芯片)数字模拟转换器(DAC)对数字音频源如各种CD机SACD机便携播放器和手机等是核心零件之一(虽然不一定贵)。DAC负责把解码好的数字音频流,转换为模拟音频信号。在这个处理过程中,芯
音频DAC解码芯片浅谈(ESS公司解码芯片介绍)数字模拟转换器(DAC)对数字音频源如各种CD机SACD机便携播放器和手机等是核心零件之一(虽然不一定贵)。DAC负责把解码好的数字音频流,转换为模拟音频信号。在这个处理过程中,芯
创业者,永远只做最重要的事情!最重要的事情是什么?创业者,永远只做最重要的事情,其他都交出去!那么,最重要的事情是什么?答案,可能与大多数人想的完全不一样!1做自己。a)创业者最重要的是做好自己。不忘初心,坚持初衷,相信自己!b)
揭秘分析都知道微信占用大量空间,究竟是些什么东西呢?清理手机垃圾,在系统自带安全管家中清理后仍不尽兴,那就到app里面清理吧,比如微信。打开微信查看存储占用情况,好家伙!占用了12。73GB呢但是,从微信的文件夹属性中可以看到也就占
尹全喜伊斐净宝之间的爱情故事对北京的印象一直还停留在2003年的初秋。那时天空湛蓝,高楼矗立在蓝天白云间。偶尔有风,柔和,没有沙尘。我怀着敬畏的心情穿过北京城,一路向北去哈尔滨寻找四年后的梦想和爱情。11年后
淘宝上未授权店铺低价乱价怎么办?目前品牌面临棘手的问题可能就是低价乱价和假货侵权等问题。今天我们针对电商市场低价乱价的问题做相关的分析,从而找到针对性的措施解决办法,帮助品牌解决目前电商市场渠道混乱的困扰。一般品
仿造乐高被罚9000万,法院严惩著作权犯罪PART。01仿冒乐高被起诉12月29日上午,涉案金额高达3。3亿元的乐拼仿冒乐高案,在上海市高级人民法院(以下简称上海高院)终审落槌,法院驳回李某等人的上诉,维持原判。李某以侵犯
创品律师代理的一宗诉国家知识产权局行政诉讼获胜诉判决近日,创品律所胡群林律师及雷秋瑜律师受某客户委托代理的一宗诉国家知识产权局商标申请驳回复审行政纠纷案,北京知识产权法院已作出一审判决,判创品律师代理的原告胜诉。法院经审理,认为被告