排序1——冒泡排序及优化

原创 2017年06月24日 17:03:31

      内排序是在排序整个过车中,待排序的所有记录全部被放置在内存中。

      外排序是由于排序的记录个数太多,不能同时放置在内存,整个排序过程需要在内外存之间多次交换数据才能进行。


      内排序分为:插入排序、冒泡(交换)排序、选择排序、归并排序。


      各排序算法的时间复杂度:

      


一、冒泡排序

(1)未优化的冒泡排序

import java.util.Scanner;

public class Test{
	//定义数组的最大长度
	static final int num=100;
	//冒泡排序
	public static void BubbleSort(int[] arr,int length){
		int temp;  //临时变量
		for(int i=1;i<length;i++){
			for(int j=1;j<=length-i;j++){
				if(arr[j]>arr[j+1]){
					temp=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;
				}
			}
		}
	}
	
	public static void main(String[] args) {
		int[] arr=new int[num];
		Scanner in=new Scanner(System.in);
		System.out.println("请输入数组中的元素个数(<=100):");
		int length=in.nextInt();
		System.out.println("输入数组中的元素:");
		for(int i=1;i<=length;i++){
			arr[i]=in.nextInt();
		}
		
		//调用排序方法对数组进行排序
		BubbleSort(arr, length);
		System.out.println("排序后的数组:");
		for(int i=1;i<=length;i++){
			System.out.print(arr[i]+" ");
		}
	}
}



运行结果:

请输入数组中的元素个数(<=100):
10
输入数组中的元素:
23 34 56 76 33 11 22 33 55 77
排序后的数组:
11 22 23 33 33 34 55 56 76 77 


上面第一种冒泡排序中,在数据的顺序排好之后,冒泡算法仍然会继续进行下一轮的比较,直到length-1次,

所以后面的比较是没有意义的。


(2)优化后的冒泡排序:


优化方案:

设置标志位flag,如果发生了交换flag设置为true;如果没有交换就设置为false。这样当一轮比较结束后如果flag仍为false,即:这一轮没有发生交换,说明数据的顺序已经排好,没有必要继续进行下去。


import java.util.Scanner;

public class Test{
	//定义数组的最大长度
	static final int num=100;
	//冒泡排序
	public static void BubbleSort(int[] arr,int length){
		int temp;  //临时变量
		boolean flag; //是否交换的标志
		for(int i=1;i<length;i++){
			flag=false;
			for(int j=1;j<=length-i;j++){
				if(arr[j]>arr[j+1]){
					temp=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;
					flag=true;
				}
			}
			if(flag==false)
				break;
		}
	}
	
	public static void main(String[] args) {
		int[] arr=new int[num];
		Scanner in=new Scanner(System.in);
		System.out.println("请输入数组中的元素个数(<=100):");
		int length=in.nextInt();
		System.out.println("输入数组中的元素:");
		for(int i=1;i<=length;i++){
			arr[i]=in.nextInt();
		}
		
		//调用排序方法对数组进行排序
		BubbleSort(arr, length);
		System.out.println("排序后的数组:");
		for(int i=1;i<=length;i++){
			System.out.print(arr[i]+" ");
		}
	}
}

时间复杂度:O(n^2)

稳定性:稳定



版权声明:本文为博主原创文章,未经博主允许不得转载。

排序算法入门之冒泡排序优化

这篇文章是对上一篇文章中的冒泡排序进行优化 先来说说,冒泡排序哪些地方需要优化: 根据上一篇文章的内容,可以知道冒泡排序的核心是两两对比进行交换。如果有一个无序数列(2,1,3,4,5,6,7,8...
  • qq_35114086
  • qq_35114086
  • 2016年09月12日 18:05
  • 219

基本的排序算法之—— 冒泡排序(稳定)(对于固定的内存空间数组或顺序表,对于单链表也可以)

/********************************************************************** * Copyright (c)2015,WK Stu...
  • kai8wei
  • kai8wei
  • 2015年04月18日 23:51
  • 819

Facebook安卓Feed流的内存优化实践

引言大量的用户每天在Android设备上使用Facebook,滚动新闻Feed流页面,包括个人资料,活动,页面和组,与他们关心的人员和信息进行互动等一系列行为。 所有这些不同的Feed类型都由Andr...
  • u010321471
  • u010321471
  • 2017年06月20日 00:38
  • 3078

程序优化

一、 序言 程序优化是指利用软件开发工具对程序进行调整和改进,让程序充分利用资源,提高运行效率,缩减代码尺寸的过程。按照优化的侧重点不同,程序优化可分为运行速度优化和代码尺寸优化。 运行速...
  • u010651072
  • u010651072
  • 2016年01月17日 18:29
  • 2316

冒泡排序及两种优化方式

定义:每一趟依次比较相邻的两个数,将小数放在前面,大数放在后面,直到一趟只剩下一个元素。 时间复杂度:O(n^2)。 冒泡排序是最常用的小型数据排序方式,下面是用C语言实现的,及其两种...
  • xufeng0991
  • xufeng0991
  • 2015年08月21日 22:51
  • 8152

Java算法实现之冒泡排序及优化

Java算法实现之冒泡排序及优化
  • a445849497
  • a445849497
  • 2017年02月14日 15:14
  • 576

【6】-BAT面试之操作系统内存详解

本文主要参考两篇博客,读后整理出来,以供大家阅读,链接如下:http://blog.jobbole.com/95499/?hmsr=toutiao.io&utm_medium=toutiao.io&u...
  • u010321471
  • u010321471
  • 2016年04月25日 23:13
  • 10283

冒泡排序

What?             冒泡排序(Bubble Sort):排序方法的思想就像他的名称,像泡泡一样冒上来。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误,就把他们交换过...
  • u010196821
  • u010196821
  • 2015年06月05日 22:51
  • 616

冒泡排序算法及其两种优化

冒泡排序算法及其两种优化 1、排序方法      将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R...
  • yanxiaolx
  • yanxiaolx
  • 2016年06月09日 18:08
  • 8611

冒泡优化测试(1百万元素排序)

☆优化:去除排序完成后的,轮数空转时间(bubblingSortx方法) 测试代码: package com.ts.w; import java.util.ArrayList; import jav...
  • typa01_kk
  • typa01_kk
  • 2015年06月30日 12:32
  • 766
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:排序1——冒泡排序及优化
举报原因:
原因补充:

(最多只允许输入30个字)