排序算法JAVA实现一

原创 2015年11月18日 11:38:36

时间复杂度为 O(N^2)的算法:冒泡排序、选择排序、插入排序

题: 对于一个int数组,请编写一个排序算法,对数组元素排序。
给定一个int数组A及数组的大小n,请返回排序后的数组。
测试样例:
  [1,2,3,5,2,3],6
  [1,2,2,3,3,5]

一,冒泡排序:

冒泡排序算法的运作如下:
  1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2.对每一对相邻元素作同样的工作,从开始第一对到最后。这样一来最后的元素会是最大的数。
  3.除了最后一个,针对位置0~N-2的所有的元素重复以上的步骤。
  4持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较

JAVA代码实现:

package Sort;
import java.util.*;

public class BubbleSort {
    public int[] bubbleSort(int[] A, int n) {
        // write code here
        int tmp;
        for(int j=n;j>1;j--){
            for(int i=0;i<j-1;i++){
                if(A[i]>A[i+1]){
                    tmp=A[i];
                    A[i]=A[i+1];
                    A[i+1]=tmp;
                }
            }
        }
        return A;
    }

    public static void main(String[] args) {          
        int[] A = { 1, 2,  3, 5, 2, 6};  
        int n=6;
        BubbleSort bs = new BubbleSort();
        bs.bubbleSort(A, n);  
        System.out.println(Arrays.toString(A));  
    }  
}

二,选择排序:

  选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。

  思路:对比数组中第一个元素跟后面元素的大小,如果后面的元素比该元素小则用一个变量k来记住他的位置,并将前面“后面的元素”现变成了“第一个元素”,继续跟他的“后面的元素”进行比较,如果后面的元素比他要小则用变量k记住它在数组中的位置(下标)并交换,等到循环结束的时候,我们就找到整个数组中最小的数并放在第一个位置了。然后找到数组中第二小的数,让他跟数组中第二个元素交换一下值,以此类推。

JAVA代码实现: 

package Sort;
import java.util.Arrays;

public class SelectionSort {
    public int[] selectionSort(int[] A, int n) {
        // write code here
        int tmp;
        int k;
        int t;
        for(int j=0;j<n-1;j++){
                k=j;
                tmp=A[j];
                for(int i=j+1;i<n;i++){
                if(tmp>A[i]){
                    tmp=A[i];
                    k=i;
                }
            }
            t=A[j];
            A[j]=tmp;
            A[k]=t;
        }
         return A;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] A = { 1, 2,  3, 5, 2, 6};  
        int n=6;
        SelectionSort ss = new SelectionSort();
        ss.selectionSort(A, n);  
        System.out.println(Arrays.toString(A));  
    }

}

三,插入排序:

直接插入排序具体算法描述如下:
  ⒈ 从第一个元素开始,该元素可以认为已经被排序
  ⒉ 取出下一个元素,在已经排序的元素序列中从后向前扫描
  ⒊ 如果该元素(已排序)大于新元素,将该元素移到下一位置
  ⒋ 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
  ⒌ 将新元素插入到下一位置中
  ⒍ 重复步骤2~5

JAVA代码实现:

package Sort;
import java.util.*;
public class InsertionSort {
    public int[] insertionSort(int[] A, int n) {
        // write code here
        int temp=0;   
        for (int i= 1;i<n;i++)    
            for(int j=i;j>0;j--){         
            if (A[j]<A[j-1]){               
                temp = A[j];                  
                A[j] = A[j-1];               
                A[j-1]= temp;             
            }
        }      
        return A;    
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] A = { 1, 2,  3, 5, 2, 6};  
        int n=6;
        InsertionSort is = new InsertionSort();
        is.insertionSort(A, n);  
        System.out.println(Arrays.toString(A)); 
    }

}

二分插入排序(Binary Insertion Sort):
  是对直接插入排序的改进,由于已排好序的部分是有序的,所以我们就能使用二分查找法确定我们的插入位置,而不是一个个找,除了这点,它跟插入排序没什么区别

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

java各自排序算法的实现

  • 2015年06月16日 16:27
  • 3KB
  • 下载

排序算法java实现

  • 2015年04月07日 17:45
  • 1.18MB
  • 下载

各种排序算法的深入分析及java实现

排序一直以来都是让我很头疼的事,以前上《数据结构》打酱油去了,整个学期下来才勉强能写出个冒泡排序。由于下半年要准备工作了,也知道排序算法的重要性(据说是面试必问的知识点),所以又花了点时间重新研究了一...

常用排序算法实现(java)

  • 2014年04月30日 15:46
  • 4KB
  • 下载

java实现的各种排序算法

折半插入排序 折半插入排序是对直接插入排序的简单改进。此处介绍的折半插入,其实就是通过不断地折半来快速确定第i个元素的插入位置,这实际上是一种查找算法:折半查找。Java的Arrays类里的binar...

java实现常见的集中排序算法

  • 2013年04月22日 18:20
  • 19KB
  • 下载

各种排序算法Java实现

校招快要开始了,复习一下以前的排序知识,下面的代码都是以前写的,今天翻出来又重新看了一下,贴上来。也算是复习吧。 插入排序,稳定排序(稳定是指相同的两个数在排序之后它们的相对位置不变。): /...

各类排序算法java的实现

  • 2008年10月20日 22:03
  • 11KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:排序算法JAVA实现一
举报原因:
原因补充:

(最多只允许输入30个字)