面试题之——常用排序算法
以下排序默认排序效果是从小到大,待排序序列:3,4,63,4,-9,0,1,32,-2
基本思想:依次交换相邻两个元素,使得大的数据往下沉(或小的数据往上附浮)
第一步:比较相邻的两个元素,如果前者比后者大,则交换两元素。否则,不交换。
第二步:重复第一步直到最后两个元素比较完成,此时,最大的元素已经在最后面了,此趟排序完成。
第三步:去除最后元素,重复上述两步,对最后元素之前的数据进行排序。
第四步:每趟排序完成后,大的数据会忘下沉,也就是需要排序的数据会越来越少,直到没有任何一对数据需要排序,排序成功
排序过程示例:
代码示例:
代码示例:
代码示例:
代码示例:
代码示例:
private void MergeSort(int[] array, int start, int end) {if(start == end) {return;}int middle = (end - start + 1)/2 + start;//分的过程MergeSort(array, start, middle-1);MergeSort(array, middle, end);//合并的过程merge(array, start, middle, end);}private void merge(int[] array, int start, int middle, int end) {int i = start, j = middle, loc = 0;int[] copy = new int[end-start+1];while(i<middle && j<=end) {if(array[i]>array[j]) {copy[loc] = array[j];j++;} else {copy[loc] = array[i];i++;}loc++;}while(i<middle) {copy[loc++] = array[i++];}while(j<=end) {copy[loc++] = array[j++];}for(int k=0; k<copy.length; k++) {array[start++] = copy[k];}copy = null;}