您的位置:首页 > 编程语言 > Java开发

用Java实现各种排序(1)---冒泡排序,直接插入排序,简单选择排序

2016-03-25 17:44 621 查看
排序算法是数据结构中经常遇到的问题,也是各种面试机试的极大热衷。笔者在准备找工作的过程中,通过《大话数据结构》一书进行复习,其中的编程是用C实现的。由于我要找的工作方向是Java,就把这些算法用Java实现了一遍,其实总体思想是一样的,只是自己记录总结一下,加深印象。

冒泡排序

冒泡排序作为最基础最容易理解的排序,其方法就是通过比较相邻的数据,如果反序则,直到没有需要交换的数据时就排序完成。冒泡排序的时间复杂度为O(n*n)。具体代码如下:

public class sort_maopao {
public static void main(String[] args) {

int[] a={2,5,4,3,5,7,9,8,6,15,11};
sort3(a);
for(int i=0;i<a.length;i++)
System.out.print(a[i]+" ");
}
public static void sort(int[] a){
boolean flag=true;    //flag用来标记是否在本次循环中进行了数据交换,如果没有,则排序完成
for(int i=0;i<a.length-1&&flag;i++){
flag=false;
for(int j=a.length-2;j>=i;j--){  //从后往前进行排序,可以在每次的交换中,使得较小的数据向前移动
if(a[j]>a[j+1]){
swap(a,j,j+1);
flag=true;
}
}
}
}
public static void swap(int[] a, int i,int j){
int temp=0;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}


}

直接插入排序

直接插入排序的思想是把一个数插入到一个有序队列中,其时间复杂度为O(n*n)。具体代码如下:

public class sort_insertSort {

public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a={2,5,4,3,5,7,9,8,6,15,11};
sort(a);
for(int i=0;i<a.length;i++)
System.out.print(a[i]+" ");
}

public static void swap(int[] a, int i,int j){
int temp=0;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}

public static void sort(int[] a){
int temp;
for(int i=2;i<a.length;i++){     //先把数组第一个数当成是有序的,从第二个数开始进行插入
if(a[i]<a[i-1]){
temp=a[i];   //用temp记录待插入的数据
int j;
for(j=i-1;a[j]>temp;j--){  //如果已排序部分的数据大约待插入数据,则数据后移
a[j+1]=a[j];
}
a[j+1]=temp;    //插入数据,由于前面对j--了,所以这里j要加1
}
}
}
}


简单选择排序

简单选择排序就是通过n-i比较,每次找到n-i+1个数中最小的数,将其与第i个数交换。简单选择排序的时间复杂度也是O(n*n)。具体代码如下:

public class sort_simpleSort {

public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a={2,5,4,3,5,7,9,8,6,15,11};
sort(a);
for(int i=0;i<a.length;i++)
System.out.print(a[i]+" ");
}
//每一次都找到最小的一个数,放在最前面
public static void 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[j]<a[min]){
min=j;    //记录最小数的位置
}
}
if(i!=min)    //判断是否相等,如果不相等则进行交换
swap(a,i,min);
}
}

public static void swap(int[] a, int i,int j){
int temp=0;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}


以上是三种最基本的算法,它们的计算复杂度都是一样的,适合小规模的排序。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: