java(Merge) 實現歸併排序,快速排序

public class sort {
public static void merge(int[] src1,  int start1,  int len1,  int[] src2,  int start2,  int len2, int[] dest,  int start ) {
int i = start1;
int j = start2;
int k = 0;
int[] tmp = new int[len1 + len2];
while (i < start1 + len1 && j < start2 + len2) {
if (src1[i] < src2[j]) {
tmp[k++] = src1[i++];
}
else
tmp[k++] = src2[j++];
}

while (i < start1 + len1) {
tmp[k++] = src1[i++];
}

while (j < start2 + len2) {
tmp[k++] = src2[j++];
}

for (int l : tmp) {
dest[start++] = l;
}

}

public static void recMerge(int dest[], int start, int len ) {

int  size = len / 2;

if (len <= 1) 
return;

recMerge(dest, start, size);
recMerge(dest, start + size, len - size);
merge(dest, start, size, dest, start + size, len - size, dest, start);
}


public static void iterMerge(int[] dest) {
int gap = 1;
int len = dest.length;
int i;

while (gap < len) {
for (i = 0; i <= len - gap * 2; i += gap * 2) {

merge(dest, i, gap, dest, i + gap, gap, dest, i);
}

if (len - i > gap)
merge(dest, i, gap, dest, i + gap, len - i - gap, dest, i);

gap = gap * 2;
}
}

public static void quickSort(int dest[], int start, int len) {
int i = start;
int j = len - 1 + start;
int flag = 0;
int tmp;

if (len <= 0)
return;

while (i < j) {
if (dest[i] > dest[j]) {
tmp = dest[i];
dest[i] = dest[j];
dest[j] = tmp;

flag = 1 - flag;
}

if (flag == 0)
i++;
else
j--;

quickSort(dest, start, i - start);
quickSort(dest, i, len - (i - start));
}
}

public static void adjustHeap(int[] data, int i, int len) {


int l = i * 2 + 1;
int r = i * 2 + 2;
int large;


if (l < len && data[l] > data[i])


large = l;
else
large = i;


if (r < len && data[r] > data[large])
large = r;
// else
// large = i;


if (large != i) {
int tmp;

tmp = data[i];
data[i] = data[large];
data[large] = tmp;


adjustHeap(data, large, len);
}
}

public static void heapSort(int[] data) {

int i;
int len = data.length;

for (i = len / 2; i >= 0; i--) {
adjustHeap(data, i, len);
}

for (i = len - 1; i >= 0; i--) {
int tmp;

tmp = data[0];
data[0] = data[i];
data[i] = tmp;

len--;
adjustHeap(data, 0, len);
}

}


public static void main(String[] args) {

int[] dest = {3, 4, 6, 8, 100, 9, 22, 56, 89, 66};

recMerge(dest, 0, dest.length);
iterMerge(dest);
quickSort(dest, 0, dest.length);
heapSort(dest);
for (int i : dest) {
System.out.print(i + " ");
}

}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章