排序算法(不断更新...)
来源:互联网 发布:防范xss攻击的js 编辑:程序博客网 时间:2024/06/13 08:40
// SortAlgorithm.java
abstract class SortAlgorithm {
public abstract void sort(int[] a);
protected void swap(int[] a, int i, int j) {
int t = a[i];
a[i] = a[j];
a[j] = t;
}
}
// BubbleSortAlgorithm.java
/**
* 冒泡排序
*/
public class BubbleSortAlgorithm extends SortAlgorithm {
public void sort(int[] a) {
for (int i = a.length - 1; i >= 0; i--) {
wrapped = false;
for (int j = 0; j < i; j++) {
if (a[j] > a[j + 1]) {
swap(a, j, j + 1);
wrapped = true;
}
}
if (!wrapped) return;
}
}
private boolean wrapped;
}
// InsertionSortAlgorithm.java
/**
* 插入排序
*/
public class InsertionSortAlgorithm extends SortAlgorithm {
public void sort(int[] a) {
for (int j = 1; j < a.length; j++) {
int t = a[j];
int i = j - 1;
while (i >= 0 && a[i] > t) {
swap(a, i, i + 1);
i--;
}
a[i + 1] = t;
}
}
}
// MergeSortAlgorithm.java
/**
* 归并排序
*/
public class MergeSortAlgorithm extends SortAlgorithm {
public void sort(int[] a) {
mergeSort(a, 0, a.length - 1);
}
private void mergeSort(int[] a, int p, int r) {
int q;
if (p < r) {
q = (p + r) / 2;
mergeSort(a, p, q);
mergeSort(a, q + 1, r);
merge(a, p, q, r);
}
}
private void merge(int[] a, int p, int q, int r) {
int n1 = q - p + 1;
int n2 = r - q;
int[] left = new int[n1 + 1];
int[] right = new int[n2 + 1];
for (int i = 0; i < left.length - 1; i++)
left[i] = a[p + i];
for (int i = 0; i < right.length - 1; i++)
right[i] = a[q + 1 + i];
left[left.length - 1] = Integer.MAX_VALUE;
right[right.length - 1] = Integer.MAX_VALUE;
for (int i = 0, j = 0, k = p; k <= r; k++) {
if (left[i] < right[j])
a[k] = left[i++];
else
a[k] = right[j++];
}
}
}
// QuickSortAlgorithm.java
/**
* 快速排序
*/
public class QuickSortAlgorithm extends SortAlgorithm {
public void sort(int[] a) {
quickSort(a, 0, a.length - 1);
}
private int partition(int[] a, int p, int r) {
int t = a[r];
int i = p - 1;
for (int j = p; j < r; j++) {
if (a[j] <= t) {
i++;
swap(a, i, j);
}
}
swap(a, i + 1, r);
return i + 1;
}
private void quickSort(int[] a, int p, int r) {
if (p < r) {
int q = partition(a, p, r);
quickSort(a, p, q - 1);
quickSort(a, q + 1, r);
}
}
}
- 排序算法(不断更新...)
- 排序算法(不断更新)
- 各种内排序算法的C++实现(不断更新中)
- 各种内排序算法的C++实现(不断更新中)
- 经典排序算法c++实现,自己复习,不断更新
- 快速排序(java)实现(本文不断更新关于排序算法的代码实现)
- 排序问题(不断总结,不断更新)
- 算法学习资源(不断更新)
- 10种排序实现及其应用【不断更新】
- java中各种排序的实现 不断更新
- 不断更新
- 算法资料连接汇总(不断更新中)
- 深入理解扩展欧几里德算法(不断更新中)
- 常用的奇妙的小算法--不断更新中
- 各种数据结构与算法知识入门经典(不断更新)
- JS常见实用算法,不断更新中,欢迎大家提意见
- 数据结构与算法有用的知识链接-----不断更新
- 经典java算法--面试题(不断更新)17.9.13
- 面向Java开发人员的Ajax:Ajax的Java对象序列化
- asp.net2.0加密数据库连接字符串
- 最新postfix 的master.cf配置参考
- postfix邮件服务器安装反垃圾,反病毒组件(续上)
- 硬盘数据恢复秘技大全(转博客天地一精贴)
- 排序算法(不断更新...)
- .Net在web服务器上启动调试开始运行时遇到的几个问题
- OpenLaszlo 4 Beta 1 发布
- 从客户端XX中检测到有潜在危险的Request.XX 值
- linux下 APACHE 2.0 进程过多的问题
- .NET资源站点汇总
- 逆向最大区配算法
- cvs管理篇
- dialer internet 电话 TAPI 3.0