java排序算法

来源:互联网 发布:java windows linux 编辑:程序博客网 时间:2024/06/08 15:56

一些原理解释请参看:http://blog.csdn.net/waiwai4701/article/details/41314757,代码都是c++写的

自己整理了下一些算法的java实现,参考别人的也写不出来的以后等自己研究出来了再补上,这篇文章写的都是能运行出结果的。

1,插入排序

public static void insert_sort2(int[] array){for(int i=1;i<array.length;i++){int j=i-1;int temp = array[i];while(j>=0&&temp<array[j]){System.out.println("i="+i+",j="+j);System.out.println("array[i]="+array[i]+",array[j]="+array[j]+",array[j+1]="+array[j+1]);array[j+1] = array[j];j--;}array[j+1] = temp;}for(int i=0;i<array.length;i++){System.out.println(array[i]);}}

2,二分插入排序

public static void binInsert_sort(int [] a){int key,left,right ,middle;for(int i=0;i<a.length;i++){key = a[i];left = 0;right = i-1;while(left <= right){middle = (left+right)/2;if(a[middle] >key)right = middle -1;else left = middle +1;}for(int j=i-1;j>=left;j--){a[j+1] = a[j];}a[left] = key;}for(int i=0;i<a.length;i++){System.out.println(a[i]);}}
3,希尔排序

public static void hill_sort(int [] a){System.out.println("排序之前:");for (int i = 0; i < a.length; i++) {System.out.print(a[i] + "");}int d = a.length;while (true) {d = d / 2;for (int x = 0; x < d; x++) {for (int i = x + d; i < a.length; i = i + d) {int temp = a[i];int j;for (j = i - d; j >= 0 && a[j] > temp; j = j - d) {a[j + d] = a[j];}a[j + d] = temp;}}if (d == 1) {break;}}System.out.println();System.out.println("排序之后:");for (int i = 0; i < a.length; i++) {System.out.print(a[i] + "");}}
4,选择排序

public static void select_sort(int [] a){int min =0;for(int i=0;i<a.length-1;i++){min = i;for(int j=i+1;j<a.length;j++){if(a[i] >a[j]){min = j;//查找到最小值}}//交换if(min != i){int t = a[min];a[min] = a[i];a[i] = t;}}for (int i = 0; i < a.length; i++) {System.out.print(a[i] + "");}}
5,冒泡排序

public static void bubble_sort(int[] a){for(int i=0;i<a.length-1;i++){for(int j=i+1;j<a.length;j++){if(a[i] >a[j]){int temp = a[i];a[i] = a[j];a[j] = temp;}}}for (int i = 0; i < a.length; i++) {System.out.print(a[i] + "");}}

6,鸡尾酒排序

public static void cocktail_sortByMe(int a[]){int head = 0;int tail = a.length-1;while(true){for(int i = head;i <tail;i++){if(a[i]>a[i+1]){int temp = a[i];a[i] = a[i+1];a[i+1] = temp;}}tail --;if(head == tail) break;for(int j=tail;j>head;j--){if(a[j]<a[j-1]){int temp = a[j];a[j] = a[j-1];a[j-1] = temp;}}head++;if(head == tail) break;}for (int i = 0; i < a.length; i++) {System.out.print(a[i] + "");}}

7,快速排序

public static void quick_sort2(int a[],int left,int right){if(left >= right) return;int pivot = a[left];int i = left+1;int j = right;while(true){while(i<right &&a[i]<pivot) i++;while(j>left &&a[j]>pivot) j--;if(i<j){int temp = a[i];a[i] = a[j];a[j] = temp;}else break;}int temp2 = a[left];a[left] = a[j];a[j] = temp2;quick_sort2(a,left,j-1);quick_sort2(a,j+1,right);for (int k = 0; k < a.length; k++) {System.out.print(a[k] + "");}System.out.println();}
8,归并排序

public static void mergeSort(int []a,int left,int right){if(left >= right) return;int center = (left + right)/2;mergeSort(a,left,center);mergeSort(a,center+1,right);merge(a,left,center,right);for(int i=0;i<a.length;i++) {System.out.print(a[i]);}System.out.println();}public static void merge(int[] a,int left,int center,int right){int[] temArr = new int[a.length];//用来存放比较完成的小数组int mid = center+1;//小数组的中间+1int third = left;//用来标记temArr的指针位置int tmp = left;//用来将小数组的值写进大数组while(left<=center &&mid<=right){if(a[left]<=a[mid]) temArr[third++]=a[left++];else temArr[third++] =a[mid++];}if(mid <=right)temArr[third++] = a[mid++];if(left <=center)temArr[third++] = a[left++];while(tmp <= right)a[tmp] = temArr[tmp++];}





0 0