关闭

排序算法JAVA实现一

标签: 排序算法选择元素插入int
426人阅读 评论(0) 收藏 举报
分类:

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

1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

java实现9大排序算法

排序大的分类可以分为两种:内排序和外排序。在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序。一般来说外排序分为两个步骤:预处理和合并排序。首先,根据可用内存的大...
  • u011514810
  • u011514810
  • 2017-02-28 21:22
  • 1658

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

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

java实现四种常用排序算法

四种常用排序算法冒泡排序特点:效率低,实现简单 思想(从小到大排):每一趟将待排序序列中最大元素移到最后,剩下的为新的待排序序列,重复上述步骤直到排完所有元素。这只是冒泡排序的一种,当然也可以从后往...
  • huosanghuakai1995
  • huosanghuakai1995
  • 2017-07-13 19:16
  • 285

java编程题:用Java实现一个简单选择排序算法

import java.util.Arrays; /** * java编程题:用Java实现一个简单选择排序算法 * * 基本思想: * 在长度为N的无序数组中,第一次遍历n-1个数,...
  • min996358312
  • min996358312
  • 2017-03-28 12:02
  • 603

java编程题:用Java实现一个冒泡排序算法

/** * java编程题:用Java实现一个冒泡排序算法 */ public class Test { public static void main(String[] args) { ...
  • min996358312
  • min996358312
  • 2017-03-21 16:07
  • 2121

Java实现九大排序算法

一、对比分析图 均按从小到大排列 k代表数值中的”数位”个数 n代表数据规模 m代表数据的最大值减最小值  稳定性:稳定排序算法会让原本有相等键值的纪录维持相对次序。也就是如...
  • nikobelic8
  • nikobelic8
  • 2017-01-17 14:13
  • 679

【排序算法】快速排序原理及Java实现

快速排序是我们之前学习的冒泡排序的升级,他们都属于交换类排序,都是采用不断的比较和移动来实现排序的。快速排序是一种非常高效的排序算法,它的实现,增大了记录的比较和移动的距离,将关键字较大的记录从前面直...
  • jianyuerensheng
  • jianyuerensheng
  • 2016-04-27 09:08
  • 25107

快速排序(Quicktsort)之Java实现

快速排序算法介绍 快速排序和归并排序都使用分治法来设计算法,区别在于归并排序把数组分为两个基本等长的子数组,分别排好序之后还要进行归并(Merge)操作,而快速排序拆分子数组的时候显得更有艺术,取一个...
  • kimylrong
  • kimylrong
  • 2013-12-05 13:14
  • 42543

八大排序算法Java

概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 我们这里说说八大排序就是内部排序。 ...
  • Happy_wu
  • Happy_wu
  • 2016-07-06 17:57
  • 27266

Java实现三种排序算法

学习Java有一段时间了,今天研究了一下简单的算法,算法确实非常难,yonglebantiandeshijiancaino
  • u014740732
  • u014740732
  • 2014-09-22 16:26
  • 819
    个人资料
    • 访问:148435次
    • 积分:2688
    • 等级:
    • 排名:第15651名
    • 原创:116篇
    • 转载:1篇
    • 译文:3篇
    • 评论:25条
    最新评论