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);}}
阅读全文
0 0
- 五种排序算法的JAVA 实现
- JAVA实现五种排序算法
- 五种排序算法实现
- 五种排序算法实现
- 用JAVA实现排序算法之五:希尔排序
- java 排序算法实现 其五:希尔排序
- 排序算法(五):JAVA实现归并排序
- 对五种排序的实现【java】
- 五种排序算法
- Java排序算法(五):快速排序
- Java排序算法(五):快速排序
- Java排序算法(五):快速排序
- Java排序算法(五):快速排序 .
- Java排序算法(五):快速排序
- Java排序算法(五):堆排序
- 《七大排序算法》(五)之堆排序(Java实现)
- 排序算法java实现
- java算法:排序实现
- Notepad++编译解释java程序方法
- 《未来简史》中的十大脑洞
- 算法提高 ADV-71 判断回文
- 动态规划的关键和精妙之处
- 组合数算法
- JAVA实现五种排序算法
- 排序:桶排序
- lua 索引
- VS2010+gtest使用总结
- 把程序注册成windows后台进程
- scala闭包
- os, os.path模块中关于文件/目录常用的函数使用方法
- centos7.2 postgresql 9.2 用户名登录 ‘psql: 致命错误: 用户 "postgres" Ident 认证失败’
- 两点间最短路径—Dijkstra算法和Floyd算法