Java数据结构系列之——简单排序:冒泡、简单选择、直接插入

package SimpleSort;

public class SimpleSort {
	/**
	 * 冒泡排序:每次循环过程中,小的排在后面的数会像水中的
	 * 气泡一样慢慢往上冒,所以命名为冒泡排序了,我猜是这样子的.....
	 */
	public void BubbleSort(int[] array){
		for(int i=0;i<array.length;i++){
			for(int j=array.length-1;j>i;j--){//注意此处j是从后往前循环
				if(array[j-1]>array[j]){//如果前面的数比其后面的数要大,则交换他们两个的位置
					swap(array,j);
				}
			}
		}
	}

	/**
	 * 简单选择排序:基本思想为从第一个数开始,每次选择其后面比他小
	 * 的最小的数与其交换位置
	 * @param array
	 */
	public void SelectSort(int[] array){
		int min;
		for(int i=0;i<array.length-1;i++){
			min=i;
			for(int j=i+1;j<=array.length-1;j++){//选择数组array中i后面的比
				                                //array[i]小的最小的数,并将其下标保存在min中
				if(array[min]>array[j]){
					min=j;
				}
			}

			if(min!=i){
				swap(array,i,min);
			}
		}
	}

	/**
	 * 直接插入排序:直接插入排序的思想类似于我们日常生活中斗地主时不断摸牌、整理排的过程
	 * 后面摸上来的扑克牌我们都会按照其牌面点数从小到大的插入到对应的位置
	 * @param array
	 */
	public void InsertSort(int[] array){
		int i,j,temp;
		for(i=1;i<array.length;i++){
			if(array[i]<array[i-1]){
				temp=array[i];
				for(j=i-1;j>=0&&array[j]>temp;j--){//注意不要忽略j>=0,否则肯能出现j=-1,造成数组越界
					array[j+1]=array[j];
				}
				array[j+1]=temp;
			}
		}
	}

	//交换
	public void swap(int array[],int i,int j){
		int temp=array[i];
		array[i]=array[j];
		array[j]=temp;
	}

	//交换
	public void swap(int array[],int j){
		int temp=array[j-1];
		array[j-1]=array[j];
		array[j]=temp;
	}
}

时间: 2024-11-05 18:49:42

Java数据结构系列之——简单排序:冒泡、简单选择、直接插入的相关文章

Java数据结构与算法(2) - 排序(冒泡、插入和选择排序)

排序需要掌握的有冒泡排序,插入排序和选择排序. 冒泡排序: 外层循环从后往前,内存循环从前往后到外层循环,相邻数组项两两比较,将较大的值后移. 插入排序: 从排序过程的中间开始(程序从第二个数组项开始a[1]),此时队列已经拍好了一部分.此时,将后边的数组项一次插入到已经排好序的部分队列中. 选择排序: 从第一个数组项开始,找到包括该数组项在内的所有往后数组项中的最小项与当前项进行交换,其实相当于依次将最小值往前冒泡. 示例代码: package chap03.BubbleSort; // bu

java面试准备之基础排序——冒泡与选择排序

选择排序: public void select(int[] arr){ for(int i=0;i<arr.length;i++){ for(int j=i+1;j<arr.length;j++){ if(arr[j]>arr[i]){ int one = arr[i]; arr[i]=arr[j]; arr[j]=one; } } } } 冒泡排序: public static int[] popo(int[] arr){ for(int i=0;i<arr.length-1;

Java数据结构和算法之数组与简单排序

一.数组于简单排序 数组 数组(array)是相同类型变量的集合,可以使用共同的名字引用它.数组可被定义为任何类型,可以是一维或多维.数组中的一个特别要素是通过下标来访问它.数组提供了一种将有联系的信息分组的便利方法. 一维数组 一维数组(one‐dimensional array )实质上是相同类型变量列表.要创建一个数组,你必须首先定义数组变量所需的类型.通用的一维数组的声明格式是: type var‐name[ ]; 获得一个数组需要2步: 第一步,你必须定义变量所需的类型. 第二步,你必

Java数据结构与算法之排序

排序从大体上来讲,做了两件事情: 1.比较两个数据项: 2.交换两个数据项,或复制其中一项 一.冒泡排序 大O表示法:交换次数和比较次数都为O(N*N). 算法原理: 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 3.针对所有的元素重复以上的步骤,除了最后一个. 4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较. /** * 冒泡排序 demo * */

python 数据结构与算法之排序(冒泡,选择,插入)

目录 数据结构与算法之排序(冒泡,选择,插入) 为什么学习数据结构与算法: 数据结构与算法: 算法: 数据结构 冒泡排序法 选择排序法 插入排序法 数据结构与算法之排序(冒泡,选择,插入) 为什么学习数据结构与算法: 计算机重要的几门课: 1.数据结构和算法 2.网络 3.操作系统 4.计算组成原理 数据结构与算法: 算法: 衡量算法的标准: 时间复杂度:就是程序代码执行的大概次数 小结: 时间复杂度是用来估计算法运行时间的一个式子(单位) 一般来说,时间复杂度高的算法比复杂度低的算法慢 常见的

Java数据结构和算法 - 高级排序

希尔排序 Q: 什么是希尔排序? A: 希尔排序因计算机科学家Donald L.Shell而得名,他在1959年发现了希尔排序算法. A: 希尔排序基于插入排序,但是增加了一个新的特性,大大地提高了插入排序的执行效率. Q: 回忆之前的插入排序,有哪些缺点? A: 回忆之前的简单排序的“插入排序”一节,在插入排序执行一半的时候,标记位i左边这部分数据项都是排过序的,而标记位右边的数据项则没有排过序.这个算法取出标记位所指的数据项,把它存储在一个临时变量里,接着,从刚刚被移除的数据项的左边第一个元

Java数据结构(线性表--&gt;顺序表简单实现)

线性表是一种可以在任意位置插入和删除元素,由n个同类型元素组成的线性结构.主要包括顺序表,单链表,循环单链表,双向链表和仿真链表.应用比较广泛的是顺序表和单链表. 2 下面是线性表的接口,主要操作包括插入元素,删除元素,取得元素,得到线性表元素个数,判断线性表是否为空. 3 package com.linear.table; 4 /** 5 * 操作顺序表的接口方法 6 * @author Mature 7 * 8 */ 9 public interface MatureListInterfac

数据结构学习笔记06排序 (冒泡、插入、希尔)

前提void X_Sort ( ElementType A[], int N ) 大多数情况下,为简单起见,讨论从小大的整数排序 N是正整数 只讨论基于比较的排序(> = < 有定义) 只讨论内部排序 稳定性:任意两个相等的数据,排序前后的相对位置不发生改变 1.冒泡排序 (从小到大排序) 物理意义:大泡泡往下沉,小泡泡往上冒 每次比较相邻两个泡泡,符合条件,交换位置,每一轮比较完,最大的泡泡沉到最底下. 最好情况:顺序T = O( N )最坏情况:逆序T = O( N^2 ) 稳定 1 #i

简单排序算法 冒泡排序 选择排序 插入排序

冒泡排序: 总体思路:对未排序的各个元素,依次比较两个元素,如果这两个元素为逆序(与想要的顺序相反),则交换这两个元素. 这样可以有两种排序的思路: 思路一: 固定位置排序:比如有一个未排序队列,下标依次为0,1,2,.....N-1, 第一轮排序:首先固定位置0,将下标为0的元素依次和下标为1.下标为2.....下标为N-1的元素相比较,若相比较的两个元素为逆序,则交换这两个元素,这样第一轮排序完之后,位置为0的元素,就是最大的(最小的). 第二轮排序:首先固定位置1,将下标为1的元素依次和下