java(Merge) 实现归并排序,快速排序
来源:互联网 发布:nginx书籍 编辑:程序博客网 时间:2024/06/14 06:05
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 + " ");
}
}
}
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 + " ");
}
}
}
- java(Merge) 实现归并排序,快速排序
- Java实现归并排序(Merge-Sort)算法
- Java实现快速排序、归并排序、堆排序
- 快速排序,归并排序,堆排序的java代码实现
- 排序算法之快速排序、归并排序(java实现)
- 简单排序Java实现(二):归并排序,快速排序
- 冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序java实现
- Java 快速排序 归并排序
- 面试需要掌握的排序 Quick Sort and Merge Sort 快速排序和归并排序 [Java]
- 用Java实现归并排序(Merge-Sort)算法
- Merge Sort(归并排序)的JAVA与Python实现
- 归并排序(Merge Sort)递归、非递归 Java实现
- java 快速排序算法--归并排序的实现
- 插入排序、选择排序、归并排序、堆排序、快速排序的JAVA实现
- Java实现冒泡排序、快速排序、选择排序、插入排序和归并排序
- java实现:快速排序,基数排序,计数排序,归并排序,堆排序,希尔排序
- 归并排序Java实现
- Java实现归并排序
- 递推求裴波那契序列
- 黑客编程教程(十一)获得系统详细信息
- 2011-2012,走过的痕迹(4)
- 黑客编程教程(十二)取得系统拥护权限
- 暑期总结——变是永远不变的
- java(Merge) 实现归并排序,快速排序
- 黑客编程教程(十三)多线程DOS程序
- 黑客编程教程(十四)单线程TCP端口扫描器
- 1338 Ugly Numbers
- 篮子放球问题(华为软件面试试题之一)
- addChild的使用 ——可视化对象
- hdu 1255
- 黑客编程教程(十五)HTTP代理
- 数字,字符串 和集合