各类算法与性能分析

各类算法与性能分析 排序算法概论 1.冒泡排序O(n2 ):

各类算法与性能分析

public class BubbleSort{ public static int[] sort (int[] array){ if(array.length == 0){ return array; } for(int i=0;i<array.length;i++){ for(int j=0;j<array.length-1-i;j++){ if(array[j+1]<array[j]){ int temp = array[j+1]; array[j+1] = array[j]; array[j] = temp; } } } } } 2.简单选择排序O(n2)

各类算法与性能分析

冒泡排序的优化

public class ChoiceSort{ public static int[] sort(int[] array){ if (array.length == 0) return array; for(int i=0;i<array.length;i++){ //存放最小数的下标 int minIndex = i; for(int j=i;j<array.length;j++){ //找到最小的那个数 if(array[j]<array[minIndex]){ minIndex = j; } } //交换 int temp = array[minIndex]; array[minIndex] = array[i]; array[i] = temp; } } } 3.简单插入排序O(n2)

各类算法与性能分析

插入排序当前数据向后移动一位不会覆盖下一位的元素吗?

不会 比较一个移动一个,移动前后一个位置已经空出来了。

public class InstertionSort { public static int[] sort(int[] array){ if (array.length == 0) return array; int currentValue;//待排序的数据 for(int i=0;i<array.length-1;i++){//默认第一个元素已经排序 int preIndex = i;//已排序数据的索引 currentValue = array[preIndex+1]; while(preIndex >= 0 && currentValue < array[preIndex]){ array[preIndex+1] = array[preIndex]; preIndex--;//遍历已排序的数组 } array[preIndex+1] = currentValue; } } } 4.分治法 1.希尔排序O(nlogn)

各类算法与性能分析

改进了简单插入排序,也称为缩小增量排序,突破了O(n2)

各类算法与性能分析

各类算法与性能分析

public class ShellSort{ public static int[] sort(int[] array){ if(array.length == 0) return array; } int len = array.length; int grap = len/2; //组内待排序的数据 int currentValue; while(grap>0){ for(int i=grap;i<len;i++) currentValue = array[i]; int preIndex = i-grap; while(preIndex>0&&array[preIndex]>currentValue){ array[preIndex + grap] = array[preindex]; preIndex = preIndex - grap; } } grap = grap/2; }

各类算法与性能分析

2.归并排序O(nlogn)

各类算法与性能分析

各类算法与性能分析

public class MergeSort{ public static int[] sort(int[] array){ //切分的位置 int mid = array.length/2; int[] left = Arrays.copyOfRange(array,0,mid); int[] right = Arrays.copyOfRange(array,mid,array.length) return merge(sort(left),sort(right)); private static int[] merge(int[] left, int[] right){ int[] result = new int[left.length + right.length]; for(int index = 0.leftIndex = 0.rightIndex = 0;index<result.length;index++){ if(leftIndex>=left.length){ result[index] = right[rightIndex++] } else if(rightIndex>=right.length){ result[index] = left[rightIndex++] } else if(left[leftIndex]>=right.length){ result[index] = right[rightIndex++] } else{ result[index] = left[leftIndex++] } } } 3.快速排序O(nlogn)

20世纪科学和工程十大算法

各类算法与性能分析

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwpwj.html