java面向对象的冒泡排序,选择排序和插入排序的比较
这三种排序有俩个过程:
1.比较俩个数据。
2.交换俩个数据或复制其中一项。
这三种排序的时间级别
冒泡排序:比较 (N-1)+(N-2)+...+2+1 = N*(N-1)/2=N2/2
交换 0——N2/2 = N2/4
总时间 3/4*N2
选择排序:比较 (N-1)+(N-2)+...+2+1 = N*(N-1)/2=N2/2
交换 0——3*(N-1)=3*(N-1)/2=3/2*N
总时间 N2/2+3/2*N
插入排序:第一轮最多比较一次,第二轮最多比较俩次,最后一轮比较N-1次,所以最多比较N*(N-1)/2。
复制的次数和比较的次数大致相等,但是复制消耗的时间比交换要小.
比较 0——N*(N-1)/2=N*(N-1)/4=N2/4
复制 0——N*(N-1)/2=N*(N-1)/4=N2/4
总时间 N2//2
总结:插入排序算法比冒泡快一倍,比选择排序略快一点,但这些算法都是O(N2)的时间级别。
这三种排序的思想
冒泡排序:在首轮,第一项和第二项比较,将大的放在后面,然后比较第二项和第三项,将大的放在后面,以此类推在首轮结束,最大的数据已经在最后一项了。在一轮轮的比较中,后面的已经排好的数据项越来越多,需要排序的数据项越来越少,直到为零。
选择排序:在冒泡排序上做了优化,减少了交换次数,在首轮选择最小的数放在第一项,一轮之后第一项是有序的了,第二轮从第二项开始选择最小的数放在第二项,以此类推,直到整个数组完全有序。
插入排序:和前俩种排序不同,插入排序在排序过程中是局部有序,随着插入项的增多,有序部分的项的位置会发生改变,而冒泡排序和选择排序每轮确定的项数的位置是永远不变的。在首轮,选择第二项作为插入项,然后取出这一项放在一个变量中,和前一项比较而且小,则前一项后移到第二项的位置,然后第二项也就是插入项放在前一项的位置,第二轮选择第三项作为插入项然后取出和前一项也就是第二项比较如果小,第二项后移到插入项,然后插入相在和第一项比较如果小,则第一项后移到第二项,插入项放在第一项,以此类推。
这三种排序的java程序
1.冒泡排序
- package aa;
- class BubbleSort{
- private long[] a;
- private int nElems;
- public BubbleSort(int max){
- a = new long[max];
- nElems = 0;
- }
- public void insert(long value){
- a[nElems] = value;
- nElems ++;
- }
- public void display(){
- for(int i = 0; i < nElems; i++)
- {
- System.out.println(a[i] + " ");
- }
- System.out.println("");
- }
- public void bubbleSort(){
- for(int i = 0; i < nElems - 1; i++)
- {
- for(int j = 0; j < nElems - 1 - i; j++)
- {
- if(a[j] > a[j + 1])
- {
- long temp = a[j];
- a[j] = a[j + 1];
- a[j + 1] = temp;
- }
- }
- }
- }
- }
- public class BubbleSortApp {
- public static void main(String[] args){
- BubbleSort arr = new BubbleSort(100);
- arr.insert(77);
- arr.insert(99);
- arr.insert(44);
- arr.insert(55);
- arr.insert(22);
- arr.insert(88);
- arr.insert(11);
- arr.insert(00);
- arr.insert(66);
- arr.insert(33);
- arr.display();
- arr.bubbleSort();
- arr.display();
- }
- }
2.选择排序
- package aa;
- class SelectSort{
- private long[] a;
- private int nElems;
- public SelectSort(int max){
- a = new long[max];
- nElems = 0;
- }
- public void insert(long value){
- a[nElems] = value;
- nElems ++;
- }
- public void display(){
- for(int i = 0; i < nElems; i++)
- {
- System.out.println(a[i] + " ");
- }
- System.out.println("");
- }
- public void SelectionSort(){
- for(int i = 0; i < nElems - 1; i++)
- {
- int min = i;
- for(int j = i + 1; j < nElems; j++)
- {
- if(a[j] < a[min])
- {
- long temp = a[j];
- a[j] = a[min];
- a[min] = temp;
- }
- }
- }
- }
- }
- public class SelectSortApp {
- public static void main(String[] args){
- SelectSort arr = new SelectSort(100);
- arr.insert(77);
- arr.insert(99);
- arr.insert(44);
- arr.insert(55);
- arr.insert(22);
- arr.insert(88);
- arr.insert(11);
- arr.insert(00);
- arr.insert(66);
- arr.insert(33);
- arr.display();
- arr.SelectionSort();
- arr.display();
- }
- }
3.插入排序
- package aa;
- class InsertSort{
- private long[] a;
- private int nElems;
- public InsertSort(int max){
- a = new long[max];
- nElems = 0;
- }
- public void insert(long value){
- a[nElems] = value;
- nElems ++;
- }
- public void display(){
- for(int j = 0; j < nElems; j++)
- {
- System.out.println(a[j] + " ");
- }
- System.out.println("");
- }
- public void insertionSort(){
- int out,in;
- for(out = 1; out < nElems; out++)
- {
- long temp = a[out];
- in = out;
- while(in > 0 && a[in-1] >= temp)
- {
- a[in] = a[in - 1];
- in --;
- }
- a[in] = temp;
- }
- }
- }
- public class InsertSortApp {
- public static void main(String[] args){
- int maxSize = 100;
- InsertSort arr = new InsertSort(maxSize);
- arr.insert(77);
- arr.insert(99);
- arr.insert(44);
- arr.insert(55);
- arr.insert(22);
- arr.insert(88);
- arr.insert(11);
- arr.insert(00);
- arr.insert(77);
- arr.insert(77);
- arr.display();
- arr.insertionSort();
- arr.display();
- }
- }
java面向对象的冒泡排序,选择排序和插入排序的比较的更多相关文章
- Java数据结构和算法总结-冒泡排序、选择排序、插入排序算法分析
前言:排序在算法中的地位自然不必多说,在许多工作中都用到了排序,就像学生成绩统计名次.商城商品销量排名.新闻的搜索热度排名等等.也正因为排序的应用范围如此之广,引起了许多人深入研究它的兴趣,直至今天, ...
- Java排序算法分析与实现:快排、冒泡排序、选择排序、插入排序、归并排序(二)
一.概述: 上篇博客介绍了常见简单算法:冒泡排序.选择排序和插入排序.本文介绍高级排序算法:快速排序和归并排序.在开始介绍算法之前,首先介绍高级算法所需要的基础知识:划分.递归,并顺带介绍二分查找算法 ...
- JavaScript算法(冒泡排序、选择排序与插入排序)
冒泡排序.选择排序与插入排序复杂度都是二次方级别的,放在一起说吧. 介绍一些学习这三个排序方法的比较好的资料.冒泡排序看<学习JavaScript数据结构与算法>介绍的冒泡排序,选择排序看 ...
- 算法 排序lowB三人组 冒泡排序 选择排序 插入排序
参考博客:基于python的七种经典排序算法 [经典排序算法][集锦] 经典排序算法及python实现 首先明确,算法的实质 是 列表排序.具体就是操作的列表,将无序列表变成有序列表! 一 ...
- 学习C#之旅 冒泡排序,选择排序,插入排序,希尔排序[资料收集]
关于冒泡排序,选择排序,插入排序,希尔排序[资料收集] 以下资料来源与网络 冒泡排序:从后到前(或者从前到后)相邻的两个两两进行比较,不满足要求就位置进行交换,一轮下来选择出一个最小(或最大)的放到 ...
- C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序
C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序 以下列出了数据结构与算法的八种基本排序:插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序 ...
- python算法(一)基本知识&冒泡排序&选择排序&插入排序
本节内容: 算法基本知识 冒泡排序 选择排序 插入排序 1. 算法基本知识 1.1 什么是算法? 算法(algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为 ...
- Java选择排序,插入排序,快速排序
public class Test { public static void main(String[] args) { int a[] = { 1, 2, 3, 4, 5 }; 选择排序(a); ...
- 归并排序 & 计数排序 & 基数排序 & 冒泡排序 & 选择排序 ----> 内部排序性能比较
2.3 归并排序 接口定义: int merge(void* data, int esize, int lpos, int dpos, int rpos, int (*compare)(const v ...
- C语言实现 冒泡排序 选择排序 希尔排序
// 冒泡排序 // 选择排序 // 希尔排序 // 快速排序 // 递归排序 // 堆排序 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h& ...
随机推荐
- MySQL语句详解(用户表、密码、权限、远程)
注: mysql.user表中Host为%的含义 Host列指定了允许用户登录所使用的IP,比如user=root Host=192.168.1.1.这里的意思就是说root用户只能通过192.168 ...
- 安装ubuntu 18.04总结
今天开发组的一个妹子同事想把系统换成ubuntu的,过来找我,给装完后,做个总结..... 以下开始操作 环境:小米air ,系统win10,cpu intel_m3 一)下载ubuntu 的镜像 h ...
- Redis(二):Redis入门介绍
Redis入门介绍目录导航: 入门概述 VMWare + VMTools千里之行始于足下 Redis的安装 Redis启动后杂项基础知识讲解 入门概述 是什么 Redis:REmote DIction ...
- urllib库使用方法 2 parse
import urllib.parse #url.parse用法包含三个方法:quote url, unquote rul, urlencode#quote url 编码函数,url规范只识别字母.数 ...
- python学习笔记:第8天 文件操作
目录 1. 文件操作介绍 2. 文件操作的几种方式 3. 文件的操作的方法 1. 文件操作介绍 说到操作文件我们肯定会想到流,文件的操作都是通过流来操作的.在python中文件的操作非常简单,并不像J ...
- ACM1019:Least Common Multiple
Problem Description The least common multiple (LCM) of a set of positive integers is the smallest po ...
- ACM1008:Elevator
Problem Description The highest building in our city has only one elevator. A request list is made u ...
- c语言单向链表逆转实现方法
自己理解的思路如下所示: 从第二个节点开始,先记录下一个节点,把第二个节点移到头节点之前,头节点变为移动的这个节点之前记录的节点变为接下来要移动的节点用for循环重复最后把原来头节点变成尾节点(*ne ...
- 20155203 2016-2017-2 《Java程序设计》第10周学习总结
20155203 2016-2017-2 <Java程序设计>第10周学习总结 教材学习内容总结 网络编程(Java Socket编程) Java最初是作为网络编程语言出现的,其对网络提供 ...
- 20155315庄艺霖第三次作业之Linux初体验
Linux初体验 安装Linux三两事 老师的作业要求基于VirtualBox安装Linux系统,我一开始下载了VB但是电脑运行不了,后来看网上的教程下载了VMware,才算开始了我的Linux之旅. ...