合并排序算法代码JAVA java合并数组排序

java编程合并排序算法package p1;
import java.util.Arrays;
public class Guy
{
/**
* 归并排序
*/
private static void mergeSort ( int[] array, int start, int end, int[] tempArray )
{
if (end = start)
{
return;
}
int middle = ( start + end ) / 2;
mergeSort (array, start, middle, tempArray);
mergeSort (array, middle + 1, end, tempArray);
int k = 0, leftIndex = 0, rightIndex = end - start;
System.arraycopy (array, start, tempArray, 0, middle - start + 1);
for ( int i = 0; iend - middle; i++ )
{
tempArray[end - start - i] = array[middle + i + 1];
}
while (kend - start + 1)
{
if (tempArray[rightIndex]tempArray[leftIndex]) // 从小到大
{
array[k + start] = tempArray[leftIndex++];
}
else
{
array[k + start] = tempArray[rightIndex--];
}
k++;
}
}
public static void main ( String[] args )
{
int[] array = new int[] { 11, 213, 134, 65, 77, 78, 23, 43 };
mergeSort (array, 0, array.length - 1, new int[array.length]);
System.out.println (Arrays.toString (array));
}
}
java 归并排序算法问题debug一下合并排序算法代码JAVA , 可以监视里面每个变量的值合并排序算法代码JAVA,
不过用断言会更专业一些,
合并排序算法代码JAVA我对算法还不是很在行
逻辑问题还得你慢慢调试
JAVA归并排序算法,有两行代码看不懂以var a = [4,2,6,3,1,9,5,7,8,0];为例子 。
1.希尔排序 。希尔排序是在插入排序上面做的升级 。是先跟距离较远的进行比较的一些方法 。
function shellsort(arr){var i,k,j,len=arr.length,gap = Math.ceil(len/2),temp;while(gap0){for (var k = 0; kgap; k++) {var tagArr = [];tagArr.push(arr[k])for (i = k+gap; ilen; i=i+gap) {temp = arr[i];tagArr.push(temp);for (j=i-gap; j -1; j=j-gap) {if(arr[j]temp){arr[j+gap] = arr[j];}else{break;}}arr[j+gap] = temp;}console.log(tagArr,"gap:"+gap);//输出当前进行插入排序的数组 。console.log(arr);//输出此轮排序后的数组 。}gap = parseInt(gap/2);}return arr;}
过程输出:
[4, 9] "gap:5"[4, 2, 6, 3, 1, 9, 5, 7, 8, 0][2, 5] "gap:5"[4, 2, 6, 3, 1, 9, 5, 7, 8, 0][6, 7] "gap:5"[4, 2, 6, 3, 1, 9, 5, 7, 8, 0][3, 8] "gap:5"[4, 2, 6, 3, 1, 9, 5, 7, 8, 0][1, 0] "gap:5"[4, 2, 6, 3, 0, 9, 5, 7, 8, 1][4, 6, 0, 5, 8] "gap:2"[0, 2, 4, 3, 5, 9, 6, 7, 8, 1][2, 3, 9, 7, 1] "gap:2"[0, 1, 4, 2, 5, 3, 6, 7, 8, 9][0, 1, 4, 2, 5, 3, 6, 7, 8, 9] "gap:1"[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
由输出可以看到 。第一轮间隔为5 。依次对这些间隔的数组插入排序 。
间隔为5:
[4, 9] "gap:5"[4, 2, 6, 3, 1, 9, 5, 7, 8, 0][2, 5] "gap:5"[4, 2, 6, 3, 1, 9, 5, 7, 8, 0][6, 7] "gap:5"[4, 2, 6, 3, 1, 9, 5, 7, 8, 0][3, 8] "gap:5"[4, 2, 6, 3, 1, 9, 5, 7, 8, 0][1, 0] "gap:5"[4, 2, 6, 3, 0, 9, 5, 7, 8, 1][4, 6, 0, 5, 8] "gap:2"[0, 2, 4, 3, 5, 9, 6, 7, 8, 1][2, 3, 9, 7, 1] "gap:2"[0, 1, 4, 2, 5, 3, 6, 7, 8, 9][0, 1, 4, 2, 5, 3, 6, 7, 8, 9] "gap:1"[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
间隔为2:
[4, 2, 6, 3, 0, 9, 5, 7, 8, 1]4605823971
排序后:
[0, 1, 4, 2, 5, 3, 6, 7, 8, 9]
间隔为1:
排序后:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 。
2.快速排序 。把一个数组以数组中的某个值为标记 。比这个值小的放到数组的左边,比这个值得大的放到数组的右边 。然后再递归 对左边和右边的数组进行同样的操作 。直到排序完成 。通常以数组的第一个值为标记 。
代码:
function quickSort(arr){var len = arr.length,leftArr=[],rightArr=[],tag;if(len2){return arr;}tag = arr[0];for(i=1;ilen;i++){if(arr[i]=tag){leftArr.push(arr[i])}else{rightArr.push(arr[i]);}}return quickSort(leftArr).concat(tag,quickSort(rightArr));}
3.归并排序 。把一系列排好序的子序列合并成一个大的完整有序序列 。从最小的单位开始合并 。然后再逐步合并合并好的有序数组 。最终实现归并排序 。

推荐阅读