java排序算法
来源:互联网 发布:软件正版化解决方案 编辑:程序博客网 时间:2024/05/22 10:38
/**
* 泡沫排序
* @author Navy 稳定空间复杂度O(1) 时间复杂度O(n^2) 最差情况:反序,需要交换n*(n-1)/2个元素最好情况:正序,不需要交换元素
*/
public class BubbleSort {
public void bubblesort(int a[], int n) {
int i, j;
int tmp;
for (i = n - 1; i > 0; i--)
for (j = 0; j < i; j++) {
if (a[j] > a[j + 1]) {
tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
BubbleSort bs = new BubbleSort();
int[] a = {6,3,4,2,9,7,5,1,8};
bs.bubblesort(a, a.length);
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}
}
/**
* 希尔排序(缩小增量排序)
*
* @author Navy 不稳定空间复杂度O(1) 时间复杂度优于插入排序,最坏情况下O(n^2)
* 最差情况:有n=2^k个元素,偶数位置上有n/2个同为最大的元素,奇数位置上有n/2个同为最小的元素,此时最优最后一趟进行插入排序(例如:1
* 5 2 6 3 7 4 8)最好情况:正序,不需要移动元素
*/
public class HillSorting {
void shellsort(int a[], int n) {
int i, j, increment;
int tmp;
for (increment = n / 2; increment > 0; increment /= 2) {
for (i = increment; i < n; i++) {
tmp = a[i];
for (j = i - increment; j >= 0 && tmp < a[j]; j -= increment) {
a[j + increment] = a[j];
}
a[j + increment] = tmp;
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
HillSorting hs = new HillSorting();
int[] a = {6,3,4,2,9,7,5,1,8};
hs.shellsort(a, a.length);
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}
}
/**
* 插入排序
* 稳定空间复杂度O(1) 时间复杂度O(n^2) 最差情况:反序,需要移动n*(n-1)/2个元素最好情况:正序,不需要移动元素
* @author Navy
*
*/
public class InsertionSort {
public void insertsort(int a[], int n) {
int i, j;
int tmp;
for (i = 1; i < n; i++) {
tmp = a[i];
for (j = i - 1; j >= 0 && a[j] > tmp; j--)
a[j + 1] = a[j];
a[j + 1] = tmp;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
InsertionSort is = new InsertionSort();
int[] a = {6,3,4,2,9,7,5,1,8};
is.insertsort(a, a.length);
for (int i = 0; i < a.length; i++) {
if(i != a.length-1)
System.out.print(a[i] + " ");
else
System.out.print(a[i]);
}
}
}
/**
* 归并排序
* @author Navy
*
*/
public class MergeSort {
final static int MAXVALUE = 10000;
static int[] L;
static int[] R;
public static void Merge(int[] A,int p,int q,int r){
int n1=q-p;//correct
int n2=r-q+1;//correct
//int n1 = q-p;
//int n2 = r-q;
L = new int[n1+1];
R = new int[n2+1];
for(int i = 0;i < n1;i++){
L[i] = A[p+i];
}
for(int j = 0;j < n2;j++){
R[j] = A[q+j];
}
L[n1]=MAXVALUE;
R[n2]=MAXVALUE;
int i = 0,j = 0;
for(int k = p; k <= r ;k++){
if(L[i]<=R[j]){
A[k] = L[i];
i++;
}else{
A[k] = R[j];
j++;
}
}
}
public static 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+1,r);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] inputArray={1,3,2,6,5,2,4,7,1,3,2,6,5,2,4,7,1,3,2,6,5,2,4,7,1,3};
MergeSort(inputArray,0,inputArray.length-1);
for(int i=0;i<inputArray.length;i++){
System.out.println("intArray["+i+"]="+inputArray[i]);
}
}
}
/**
* 快速排序
*
* @author Navy
*/
public class QuickSort {
public int partition(int[] r, int first, int end) {
int i = first;
int j = end;
int temp;
while (i < j) {
while (i < j && r[i] <= r[j]) {
j--;
} // 右侧扫描
if (i < j) {
temp = r[i];
r[i] = r[j];
r[j] = temp;
i++;
}
while (i < j && r[i] <= r[j]) {
i++;
}
; // 左侧扫描
if (i < j) {
temp = r[i];
r[i] = r[j];
r[j] = temp;
j--;
}
}
return i;
}
public void quickSort(int[] r, int first, int end) {
int pivot;
if (first < end) {
pivot = partition(r, first, end);
/*for (int i = 0; i < r.length; i++) {
System.out.print("r[" + i + "]= " + r[i] + ",");
}
System.out.println(pivot);*/
quickSort(r, first, pivot - 1);
quickSort(r, pivot + 1, end);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
QuickSort qs = new QuickSort();
int[] a = { 6, 3, 4, 2, 9, 7, 5, 1, 8, 10 };
qs.quickSort(a, 0, 9);
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}
}
/**
* 选择排序
* @author Navy
* 不稳定空间复杂度O(1) 时间复杂度O(n^2) 最差情况:第一个元素为最大元素,其余元素正序,需要交换n-1个元素(例如:4
* 3 2 1)最好情况:正序,不需要交换元素
*
*/
public class SelectionSort {
public void selectsort(int a[], int n) {
int i, j, k;
int tmp;
for (i = 0; i < n - 1; i++) {
k = i;
for (j = i + 1; j < n; j++) {
if (a[j] < a[k])
k = j;
}
if (k != i) {
tmp = a[i];
a[i] = a[k];
a[k] = tmp;
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
SelectionSort ss = new SelectionSort();
int[] a = {6,3,4,2,9,7,5,1,8};
ss.selectsort(a, a.length);
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}
}
- Java排序算法: 冒泡排序
- Java排序算法 快速排序
- Java排序算法 堆排序
- Java排序算法 归并排序
- Java排序算法 希尔排序
- 算法:排序----Java快速排序
- 排序算法-冒泡排序 java
- 排序算法-选择排序 java
- 算法:排序----Java选择排序
- java排序算法---归并排序
- Java排序算法:堆排序
- Java排序算法:归并排序
- Java排序算法:快速排序
- java 排序算法---插入排序
- java 排序算法-选择排序
- java 排序算法--冒泡排序
- Java排序算法:快速排序
- Java排序算法:插入排序
- italkBB 老板杂谈
- 谈总体设计与代码质量
- 最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用4
- VS2005/2008中清除最近打开项目的方法
- 罗森塔尔效应
- java排序算法
- C语言 结构体的内存对齐问题与位域
- 最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用5
- ubuntu上eclipse无法使用复制行并上/下移动热键 Ctrl + Alt + Up/Down
- 疯狂的Web应用开源项目
- 最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用6
- 【转】优化Linux内核参数
- 最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用7
- svn 版本问题