排序大集合java

今日面试被问到排序问题,发现自己的不足,特来查漏补缺:

首先是各大排序算法的总结表

排序算法大合集 
排序算法平均时间复杂度最好情况最坏情况空间复杂度稳定性
冒泡排序Ο(n2)Ο(n)Ο(n2)Ο(1) 稳定
选择排序Ο(n2)Ο(n2)Ο(n2)Ο(1) 不稳定
插入排序Ο(n2)Ο(n)Ο(n2)Ο(1) 稳定
希尔排序Ο(nlogn)Ο(nlog2n)Ο(nlog2n)Ο(1) 不稳定
归并排序Ο(nlogn)Ο(nlogn)Ο(nlogn)Ο(n)稳定 
快速排序Ο(nlogn)Ο(nlogn)Ο(n2)Ο(logn)不稳定 
堆排序Ο(nlogn)Ο(nlogn)Ο(nlogn)Ο(1)不稳定 
计数排序Ο(n+k)Ο(n+k)Ο(n+k)Ο(k)稳定 
桶排序Ο(n+k)Ο(n+k)Ο(n2)Ο(n+k)稳定 
基数排序Ο(n*k)Ο(n*k)Ο(n*k)Ο(n+k)稳定 

 

今天回忆了冒泡排序与选择排序两种:

冒泡排序:比较两个相邻元素,将值大的元素交换至右端。

依次比较相邻的两个数,将小数放在左端,大数放在右端。第一趟结束后,最后一个数是最大的,第二趟比较时最后一个数不参加比较。

选择排序:每一趟在待排序的记录中找出最小元素,放在已经排好序的序列最后,直到所有记录排序完成。

第一趟排序,将arr[1]~arr[n]中最小的数与arr[1]交换;第2趟,将arr[2]~arr[n]间最小的数与arr[2]交换,依次类推。

二者区别

1)冒泡排序是比较相邻两个位置的数,而选择排序是按照顺序比较,找到最大值或者最小值;

2)冒泡排序每一轮比较后,位置不对都需要换位置,而选择排序每一轮比较只换位一次;

3)冒泡排序是通过数去找位置,选择排序是通过位置来找数。

冒泡排序的优点比较简单、空间复杂度低,稳定;

缺点:时间复杂度较高,效率慢;

选择排序的优点:一轮比较只需要换一次位置

缺点:效率慢,不稳定,如5,3,5,2,9,第一次互换位置后,两个5的相对位置前后顺序就破坏了。

代码:待补充,已编辑进eclipse中。

 

首先用自己最近实战的java语言来进行一个排序问题编程:

问题:对输入的n个数排序并输出

输入:两行,第一行为n;第二行为需要进行排序的n个数

输出:一行,即排序后的数

 1 import java.util.Scanner;
 2 import java.util.Arrays;
 3 public class Main{
 4     public static void main(String [] args){
 5         Scanner in = new Scanner(System.in);
 6         while(in.hasNext()){
 7              int n = in.nextInt();
 8              int[] arr = new int[n];
 9              for(int i = 0;i<n;i++){
10                  arr[i] = in.nextInt();
11              }
12              Arrays.sort(arr);
13              for(int i = 0;i<n;i++)
14                  System.out.print(arr[i]+" ");
15               System.out.println();
16               }
17         }
18 }

 

转载于:https://www.cnblogs.com/10081-AA/p/10719673.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值