java数据结构之排序总结
来源:互联网 发布:mac 日服加速器 编辑:程序博客网 时间:2024/04/28 06:41
/**
* 排序测试类
*
* 排序算法的分类如下:
* 1.插入排序(直接插入排序、折半插入排序、希尔排序);
* 2.交换排序(冒泡泡排序、快速排序);
* 3.选择排序(直接选择排序、堆排序);
* 4.归并排序;
* 5.基数排序。
*
* 关于排序方法的选择:
* (1)若n较小(如n≤50),可采用直接插入或直接选择排序。
* 当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插人,应选直接选择排序为宜。
* (2)若文件初始状态基本有序(指正序),则应选用直接插人、冒泡或随机的快速排序为宜;
* (3)若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或归并排序。
*
*/
public class SortTest {
/**
* @param args
*/
publicstaticvoid main(String[] args) {
int []arr=newint[]{1,2,5,4,6,7,12,10};
冒泡泡排序
//bubbleSort(arr);
插入排序
//insertSort(arr);
选择排序
//selectSort(arr);
堆排序
heapSort(arr);
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
publicstaticvoid bubbleSort(int[]arr){
for(int i=0;i<arr.length;i++)
{
// for(int j=arr.length-2;j>=i;j--)
// {
// if(arr[j]>arr[j+1])
// {
// int tmp=arr[j];
// arr[j]=arr[j+1];
// arr[j+1]=tmp;
// }
// }
for(int j=0;j<arr.length-i-1;j++)
{
if(arr[j]<arr[j+1])
{
int tmp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;
}
}
}
}
// 插入排序
publicstaticvoid insertSort(int[]arr){
for(int i=1;i<arr.length;i++)
{
int tmp=arr[i];
int j=i;
for(;j>0&&tmp>arr[j-1];j--)
//if()
arr[j]=arr[j-1];
arr[j]=tmp;
for(int m=0;m<arr.length-1;m++){
System.out.print(arr[m]+",");
}
System.out.println("\n");
}
}
// 选择排序:从未排好的数中选一个最大值,插到已排好的序列中
publicstaticvoid selectSort(int[] arr) {
for (int i=0;i<arr.length;i++) {
int idx=i;
for(int j=i+1;j<arr.length;j++)
{
if(arr[j]>arr[idx])
idx=j;
}
if(idx!=i)
{
int tmp=arr[idx];
arr[idx]=arr[i];
arr[i]=tmp;
}
}
}
//堆排序
publicstaticvoid heapSort(int[] arr) {
for (int i=( arr.length/2-1);i>=0; i--) {
reheap(arr,i,arr.length-1);
}
int tmp=arr[arr.length-1];
arr[arr.length-1]=arr[0];
arr[0]=tmp;
for (int j=( arr.length-2);j>0; j--) {
reheap(arr,0,j);
tmp=arr[j];
arr[j]=arr[0];
arr[0]=tmp;
}
}
publicstaticvoid reheap(int[] arr,int rootIndex,int lastIndex)
{boolean done=false;
int orphan=arr[rootIndex];
int largeChild=rootIndex*2+1;
int leftChild=0;
int rightChild=0;
while (!done&&largeChild<=lastIndex) {
leftChild=largeChild;
rightChild=leftChild+1;
if(rightChild<lastIndex&&arr[rightChild]>arr[largeChild]){
largeChild=rightChild;
}
if(orphan<arr[largeChild])
{
arr[rootIndex]=arr[largeChild];
rootIndex=largeChild;
largeChild=rootIndex*2+1;
}
else
done=true;
}
arr[rootIndex]=orphan;
for(int m=0;m<arr.length;m++){
System.out.print(arr[m]+",");
}
System.out.println("");
}
}
- java数据结构之排序总结
- java数据结构学习之旅-简单排序总结
- Java数据结构与算法之常见排序算法总结
- 数据结构之排序总结1
- 数据结构排序之总结2
- 数据结构之排序总结3
- 数据结构之排序总结4
- 数据结构之排序算法总结
- 数据结构之排序算法总结
- 数据结构总结之拓扑排序
- JAVA 数据结构之快速排序
- java数据结构之选择排序
- java数据结构之冒泡排序
- java数据结构之插入排序
- java 数据结构之堆排序
- Java数据结构之快速排序
- Java之排序总结
- java数据结构排序之选择排序实现
- 从驱动开始。。。我要向CSND学习了。。。。
- (2011.12.01) 06_快速排序(QuickSort).cpp
- Linux中DD命令详解
- thinkphp导入 zend Studio8.0 出错 解决方法
- 马云:我成功的唯一理由是“三多”
- java数据结构之排序总结
- C++之python函数调用
- VS 字体及配色方案
- Linux笔记:我看过最好的Fstab教学。
- 离职合同说明
- PCB布线规范
- Linux下tsclient,rdesktop远程登录Windows XP Vista
- apt-get使用
- 杭电1163 Eddy's digital Roots