几种简单的排序算法

一、排序算法的实现

举个栗子,对一组数据进行排序。方法如下:

首先对于数据可以先初始化或者选择从键盘上输入,初始化过程如下:

public class Sort {
    public static void main(String args[]){
        int[] Array = new int[]{45,32,67,54,31,41};

 接下来就是进行排序方法的实现:

1.调用方法排序

Arrays.sort(数组名);
Arrays.sort(Array);

2.冒泡排序(比较容易上手)

很简单,用到的很少,据了解,面试的时候问的比较多!

其基本思想为(如升序排列,就是想从小到大的排序):从第一个元素开始,对数组中两两两相邻的元素比较,将数值较小的元素进行交换后放在前面,数值较大的元素进行交换后放在后面 ,一轮比较完成后(也就是完成一次内循环后),数组中最大的数已经放在数组中最后一位,一些较小的数如同气泡一样上浮一个位置。n个数,进行n-1轮比较后完成排序。(如果对于嵌套循环有什么疑惑之处,请找度娘!) 

代码如下:

        //冒泡排序
       for(int i=0;iArray[j]){
                 int temp = Array[j];
                   Array[j] = Array[i];
                    Array[i] = temp;
                }
            }
        }
  

3.选择排序

其基本思想: 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

几种简单的排序算法_第1张图片

 

代码实现:

        for(int i=0;i

补充1:选择排序的时间复杂度为O(n^2),由于每次选择仅考虑某一位置上的数据情况,可能会破坏之前数据的相对位置,因此它是一种不稳定的排序方法

当然还有其它一些排序算法,有兴趣的可以去平台找找答案。

二、总结(算法的特点)

1.算法的稳定性: 

其概念:算法稳定性指的是在一组待排序记录中,如果存在任意两个相等的记录R和S,且在待排序记录中R在S前,如果在排序后R依然在S前,即它们的前后位置在排序前后不发生改变,则称为排序算法为稳定的。

    稳定:冒泡排序、插入排序、归并排序和基数排序

    不稳定:选择排序、快速排序、希尔排序、堆排序

2.平均时间复杂度

    O(n^2):直接插入排序,简单选择排序,冒泡排序。

    在数据规模较小时,直接插入排序,简单选择排序差不多。

当数据较大时,冒泡排序算法的时间代价最高。性能为O(n^2)的算法基

本上是相邻元素进行比较,基本上都是稳定的。

     O(nlogn):快速排序,归并排序,希尔排序,堆排序。

       其中,快排是最好的, 其次是归并和希尔,堆排序在数据量很大时

效果明显。

三、算法的选择

1.数据规模较小

   (1)待排序列基本序的情况下,可以选择直接插入排序

   (2)对稳定性不作要求宜用简单选择排序,对稳定性有要求宜用插入

或冒泡。

2.数据规模不是很大

 (1)完全可以用内存空间,序列杂乱无序,对稳定性没有要求,快速排序

此时要付出log(N)的额外空间。

 (2)序列本身可能有序,对稳定性有要求,空间允许下,宜用归并排序。

3.数据规模很大

   (1)对稳定性有求,则可考虑归并排序。

   (2)对稳定性没要求,宜用堆排序。

4.序列初始基本有序(正序),宜用直接插入,冒泡。

补充2:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。

借鉴一张图片如下、

几种简单的排序算法_第2张图片

几种简单的排序算法_第3张图片

 

你可能感兴趣的:(排序算法,算法,java)