排序算法JAVA实现一

时间复杂度为 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):
  是对直接插入排序的改进,由于已排好序的部分是有序的,所以我们就能使用二分查找法确定我们的插入位置,而不是一个个找,除了这点,它跟插入排序没什么区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值