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

排序算法之简单算法——java实现

2017-09-29 17:01 369 查看

排序算法之简单算法

排序算法中的简单算法共有3种:冒泡排序,简单选择排序,直接插入排序。

1.冒泡排序

  冒泡排序是通过从数组最后往前进行比较,把较小的数交换到前面,较大的数交换到后面的一种交换排序算法。

  其java代码如下:

//冒泡排序,小的数一个个冒上来
public void bubbleSort(int[] a)
{
int i,j;
boolean flag=true;//若已冒泡完成,则退出for循环
for (i = 0; i < a.length&&flag; i++) {
flag=false;
for (j = a.length-1; j>i; j--) {//从后往前循环,把小的数冒到前面,大的数到后面
if (a[j-1]>a[j]) {
swap(a, j-1, j);
flag=true;
}
}
}
}


  在上面的代码中,加入了一个flag标志,用来判断是否已经有序了,可以减少一些不必要的循环。

  冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1),并且冒泡排序是一种稳定的排序。

2.简单选择排序

  简单选择排序是从数组中选出第1小的元素放入a[0],第2小的元素放入a[1],第n小的元素放入a[n-1]位置的一种选择排序算法。

  其java代码如下:

//简单选择排序,选出第1小放到第1个位置,第2小到第2个位置,第n小到第n个位置
public void simpleSelectSort(int[] a)
{
int i,j,min;

for(i=0;i<a.length;i++)
{
min=i;//第n小
for ( j= i+1;j < a.length; j++) {//找到i+1...length的最小的值的位置
if (a[j]<a[min]) {
min=j;
}
}
if (min!=i) {//最小值不是初始位置,则交换
swap(a, min, i);
}
}
}


  简单选择排序算法的时间复杂度为O(n^2),空间复杂度为O(1),且是一种稳定的排序算法。 

3.直接插入排序

  直接插入排序的基本思想是:将a[1]插入a[0]的相应位置,以组成一个有序列表a[0…1],将a[2]插入有序列表a[0…1]的相应位置,以组成一个有序列表a[0…2],将a
插入有序列表a[0…n-1]的相应位置,以组成一个有序的a[0…n]。


  直接插入排序是一种插入排序类算法,其java代码如下:

  

//直接插入排序,将待排序元素插入已排好序的序列中
public void insertSort(int[] a)
{
int i,j,m;
for (i = 1; i < a.length; i++) {//从第二个位置开始,依次将该元素插入前面的排好序的序列中
if (a[i]<a[i-1]) {//待排序元素比序列中最小的元素小,则进行插入
m=a[i];//标记待排序元素的值
for (j = i-1;j>=0&&a[j]>m;j--) {
//从排好序的序列中依次向前比较,直到m>a[j]标记元素大于排序元素,或m小于排序元素中最小的
a[j+1]=a[j];//排好序的序列元素后移
}
a[j+1]=m;//标记元素放入空缺的位置
}
}
}


直接插入排序算法的时间复杂度为O(n^2),空间复杂度为O(1),其实一种稳定的排序算法。

4.总结

  这三种简单的排序算法是学习后面希尔排序,堆排序,快速排序,归并排序的基础,只有理解了这些基础的简单排序算法,才能更好的理解和编写后面要写的改进排序算法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  排序算法 java