JAVA实现五种排序算法

来源:互联网 发布:程序化交易软件下载 编辑:程序博客网 时间:2024/05/29 15:24

用JAVA实现冒泡排序、选择排序、插入排序、快速排序和归并排序。封装在sort类中。

class Sort{/* 辅助函数 *///Java没有引用,利用数组来完成值的交换void swap(int a[], int i, int j) {int c = a[i];a[i] = a[j];a[j] = c;} //输出数组void print(int a[]) {for(int i: a) {System.out.print(i + " ");}System.out.print("\n");}//----------------华丽分割线--------------------///* 5种排序算法的实现 *///冒泡排序public void Bubble_Sort(int a[], int n) {for(int i = n - 2; i >= 0; i--) {for(int j = 0; j <= i; j++) {if(a[j] > a[j + 1])swap(a, j, j + 1);}}}//插入排序public void Insert_Sort(int a[], int n) {for(int i = 1; i < n; i++) {if(a[i] < a[i - 1]) {int temp = a[i], j = i - 1;while(j >= 0 && a[j] > temp) {a[j + 1] = a[j];j--;}a[j + 1] = temp;}}}//选择排序public void Selection_Sort(int a[], int n) {for(int i = 0; i < n; i++) {int min = a[i], min_index = i;for(int j = i + 1; j < n; j++) {if(a[j] < min) {min = a[j];min_index = j;}}swap(a, i, min_index);}}//快速排序//参考 http://www.cnblogs.com/CBDoctor/p/4077574.htmlpublic void Quick_Sort(int a[], int n) {recursive(a, 0, n - 1);}void recursive(int a[], int left, int right) {if(left > right)return ;int x = a[left];int i = left, j = right;while(i != j) {while(i < j && a[j] >= x)j--;while(i < j && a[i] <= x)i++;swap(a, i, j);}swap(a, left, i);recursive(a, left, i - 1);recursive(a, i + 1, right);}//归并排序//参考 http://blog.csdn.net/morewindows/article/details/6678165void Merge_Sort(int a[], int n) {mergeSort(a, 0, n - 1);}void mergeSort(int a[], int left, int right) {if(left < right) {int mid = (left + right) / 2;//先递归的给左右两个子数组排序mergeSort(a, left, mid);mergeSort(a, mid + 1, right);//合并两个已经有序的数组mergeArray(a, left, right, mid);}}void mergeArray(int a[], int left, int right, int mid) {int copy[] = new int[right - left + 1];int i = left, j = mid + 1;int limit_1 = mid + 1, limit_2 = right + 1;//两个数组的界限int index = 0;while(i < limit_1 && j < limit_2) {if(a[i] < a[j]) copy[index++] = a[i++];else copy[index++] = a[j++];}while(i < limit_1) copy[index++] = a[i++];while(j < limit_2) copy[index++] = a[j++];//把值赋给原来的数组for(int k = 0; k < copy.length; k++)a[left + k] = copy[k];}}public class HelloWorld {public static void main(String[] args) {int a[] = {1, 1, 2, 2, 0, 6, 3, 2, 6};Sort sort = new Sort();sort.Merge_Sort(a, a.length);sort.print(a);}}



原创粉丝点击