排序大集合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个数
输出:一行,即排序后的数
import java.util.Scanner;
import java.util.Arrays;
public class Main{
public static void main(String [] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
int n = in.nextInt();
int[] arr = new int[n];
for(int i = 0;i<n;i++){
arr[i] = in.nextInt();
}
Arrays.sort(arr);
for(int i = 0;i<n;i++)
System.out.print(arr[i]+" ");
System.out.println();
}
}
}
排序大集合java的更多相关文章
- 十大经典排序算法(java实现、配图解,附源码)
		
前言: 本文章主要是讲解我个人在学习Java开发环境的排序算法时做的一些准备,以及个人的心得体会,汇集成本篇文章,作为自己对排序算法理解的总结与笔记. 内容主要是关于十大经典排序算法的简介.原理.动静 ...
 - PourOver – 快速筛选和排序大的数据集合
		
PourOver 是一个用于对大数据集合进行快速过滤的 JavaScript 库.它可以在60fps下运行,允许您构建数据研究应用和档案,即不必等待一个数据库调用来呈现查询结果. PourOver 基 ...
 - Java 学习笔记 两大集合框架Map和Collection
		
两大框架图解 Collection接口 由第一张图,我们可以知道,Collection接口的子接口有三种,分别是List接口,Set接口和Queue接口 List接口 允许有重复的元素,元素按照添加的 ...
 - Python GUI之tkinter窗口视窗教程大集合(看这篇就够了)  JAVA日志的前世今生  .NET MVC采用SignalR更新在线用户数  C#多线程编程系列(五)- 使用任务并行库 C#多线程编程系列(三)- 线程同步 C#多线程编程系列(二)- 线程基础   C#多线程编程系列(一)- 简介
		
Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) 一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 ...
 - JAVA大集合数据分批次进行切割处理
		
今天遇到一个大集合里面的数据删除问题, 因为是一个大集合,如果同时传递到数据库,那么就会造成数据库压力 所以分批次的进行批量操作 其实 也可以采用多线程来处理或者多批次加多线程来处理都是可以的 下面的 ...
 - 各种排序算法及其java程序实现
		
各种排序算法:冒择路(入)兮(稀)快归堆,桶式排序,基数排序 冒泡排序,选择排序,插入排序,稀尔排序,快速排序,归并排序,堆排序,桶式排序,基数排序 一.冒泡排序(BubbleSort)1. 基本思想 ...
 - 各大公司java后端开发面试题
		
各大公司Java后端开发面试题总结 ThreadLocal(线程变量副本)Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量.采用空间换时间,它用于线程间的数据隔离 ...
 - 排序算法及其java实现
		
各种排序算法:冒择路(入)兮(稀)快归堆,桶式排序,基数排序 冒泡排序,选择排序,插入排序,稀尔排序,快速排序,归并排序,堆排序,桶式排序,基数排序 一.冒泡排序(BubbleSort) 1. 基本思 ...
 - 干货100+ 最超全的web开发工具和资源大集合
		
干货100+ 最超全的web开发工具和资源大集合 作为Web开发者,这是好的时代,也是坏的时代.Web开发技术也在不断变化.虽然很令人兴奋,但是这也意味着Web开发人员需要要积极主动的学习新技术和 ...
 
随机推荐
- C++——volatile关键字的学习
			
首先声明一点,本文是关于volatile关键字的学习,学习内容主要是来自一些大牛的网络博客. 一篇是何登成先生的C/C++ Volatile关键词深度剖析(http://hedengcheng.com ...
 - 集成direnv 与docker-compose 进行环境变量管理
			
direnv 是一个不错的换将变量管理工具,同时日常的开发测试中我们使用docker-compose 会比较多,一般我们的玩法是 可以再docker-compose 中指定环境变量,可以通过envir ...
 - swiper内容滚动
			
<html> <head> <meta charset="UTF-8"> <meta name="viewport" ...
 - Java基础随记-不定时更新
			
一.hashMap与hashTable与ConcurrentHashMap: 1.HashMap是继承自AbstractMap类,而HashTable是继承自Dictionary类.不过它们都同时实现 ...
 - tolua 转换 std::shared_ptr
			
tolua 转换 std::shared_ptr 自从c++11以后std::shared_ptr几乎是比用的东西,经常会遇到类似如下应用 std::shared_ptr<Tst_ShareTe ...
 - 带宽怎么算---Gbit/s
			
带宽怎么算---Gbit/s 信息来源: 计算方法: 带宽的实际应用:
 - 阅读ug949-vivado-design-methodology笔记
			
阅读ug949-vivado-design-methodology笔记 xilinx更加推荐使用同步复位 怎样去设计时钟使能信号
 - WindowsDenfender
			
c:\Program Files\Windows Defender>MpCmdRun.exe -scan -scantype 3 -file "D:\手动更新病毒库" -Di ...
 - Windows10上桌面共享
			
Windows自带的桌面共享软件 命令行输入: Msra.exe
 - SpringCloud启动类指定扫描包路径
			
//如果这个启动类所在的包路径隐藏的很深,则需要指定扫描包.否则默认扫描启动类所在的子包路径下 @SpringBootApplication(scanBasePackages="com.jo ...