Java冒泡,选择,插入排序算法

冒泡排序

基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。
 即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。
 第一次比较排序的结果:会把其中最大的数据排到最大的索引处
 第二次比较排序后的结果:因为第一次已经把最大的一个数据放到了最大的索引的地方,所以这次要进行比较的数据比数组里面的元素的数据个数-1个,而第二大的数据也会排到第二大的索引处
    第三次比较排序的结果:跟第二次差不多,只是这次要进行比较的数据比数组里面的元素的数据个数还少了2个,
    第四次:少3个...
  综上所述,要使数组里面的数据按照从小到大排序,总的比较的次数会比数组的长度-1次,而随着比较的次数的增加,每次要进行比较的数据依次减少。

public class Demo4 {

    public static void main(String[] args) {
	int number[]={49,38,65,97,76,13,27,14,10};
	for(int i=0;i<number.length-1;i++){
	    for(int j=0;j<number.length-1-i;j++){
		if(number[j]>number[j+1]){
		    int tmp=number[j];
		    number[j]=number[j+1];
		    number[j+1]=tmp;
		}
	    }
	    for (int j = 0; j < number.length; j++) {
		System.out.print(number[j]+"\t");

	    }
	    System.out.println("排序"+(i+1)+"次后的结果");

	}

    }

}

选择排序

基本方法:
从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处,第二次找到第二小的值。
具体是如何实现呢?
首先第一轮是0索引上的数据依次跟后面各个索引上的数据进行比较,直到遇到一个比它小的数据,这时候,这个小的数据就替换掉0索引上原来的数据,接着这个替换掉的数据继续跟它原来的索引位置的后面的索引上的数据进行比较也就是说,进行完第一轮后,0索引上的数据肯定是这个数组上最小的数据
第二轮接着就是1索引上的数据来跟后面的数据进行比较,这个时候参与比较的数据比原来少了一个
第三轮又会少一个,这样循环一轮j的值就会+1,也就是j开始的索引下标+1。

public class Demo5 {

    public static void main(String[] args) {
	int number[]={49,38,65,97,76,13,27,14,10};
	for(int i=0;i<number.length;i++){
	    for(int j=i+1;j<number.length;j++){
		if(number[i]>number[j]){
		    int tmp=number[i];
		    number[i]=number[j];
		    number[j]=tmp;
		}
	    }
	    for (int j = 0; j < number.length; j++) {
		System.out.print(number[j]+"\t");
	    }
	    System.out.println("第"+(i+1)+"次排序后的结果");

	}

    }

}

插入排序

插入排序就是把当前待排序的元素插入到一个已经排好序的列表里面。 一个非常形象的例子就是右手抓取一张扑克牌,并把它插入左手拿着的排好序的扑克里面。
 插入排序的最坏运行时间是O(n2), 所以并不是最优的排序算法。
 如果输入数组已经是排好序的话,插入排序出现最佳情况,其运行时间是输入规模的一个线性函数。
 如果输入数组是逆序排列的,将出现最坏情况。平均情况与最坏情况一样,其时间代价是Θ(n2)

public class Demo6 {

    public static void main(String[] args) {
	    //定义一个整型数组
	    int[] nums = new int[]{4,3,-1,9,2,1,8,0,6};
	    //打印没有进行排序的数组
	    System.out.println("没有排序之前的结果:" + Arrays.toString(nums));
	    for(int index=0; index<nums.length; index++) {
	      //获得需要插入的数值
	      int key = nums[index];
	      //取得下标值
	      int position = index;
	      //循环比较之前排序好的数据,找到合适的地方插入
	      while(position >0 && nums[position-1] > key) {
	        nums[position] = nums[position-1];
	        position--;
	      }
	      nums[position] = key;
	    }
	    //打印排序后的结果
	    System.out.println("排序后的结果:" + Arrays.toString(nums));
	  } 

}
时间: 2024-11-01 11:58:45

Java冒泡,选择,插入排序算法的相关文章

java实现选择排序算法_java

java实现选择排序算法 public static void selectSort(int[] array) { for (int i = 0; i < array.length - 1; i++) { int min = i; for (int j = i + 1; j < array.length; j++) { if (array[j] < array[min]) { min = j; } } Sort.swap(array, i, min);//交换i和min } } 选择排序

Java实现选择排序算法的实例教程_java

选择排序概念 选择排序也是一种交换排序算法,和冒泡排序有一定的相似度,因此个人认为选择排序可以视为冒泡排序的一种改进算法.它的思路是这样的: 设现在要给数组arr[]排序,它有n个元素. 1对第一个元素(Java中,下标为0)和第二个元素进行比较,如果前者大于后者,那么它一定不是最小的,但是我们并不像冒泡排序一样急着交换.我们可以设置一个临时变量a,存储这个目前最小的元素的下标.然后我们把这个目前最小的元素继续和第三个元素做比较,如果它仍不是最小的,那么,我们再修改a的值.如此直到和最后一个元素

JAVA简单选择排序算法原理及实现_java

简单选择排序:(选出最小值,放在第一位,然后第一位向后推移,如此循环)第一位与后面每一个逐个比较,每次都使最小的置顶,第一位向后推进(即刚选定的第一位是最小值,不再参与比较,比较次数减1) 复杂度: 所需进行记录移动的操作次数较少 0--3(n-1) ,无论记录的初始排列如何,所需的关键字间的比较次数相同,均为n(n-1)/2,总的时间复杂度为O(n2):空间复杂度 O(1) 算法改进:每次对比,都是为了将最小的值放到第一位,所以可以一比到底,找出最小值,直接放到第一位,省去无意义的调换移动操作

PHP 冒泡/快速/选择/插入排序算法实例讲解

四大基本排序算法分别是:冒泡排序法,快速排序法,选择排序法,插入排序法,本文我们用 PHP 实例讲解这四大基本排序. 1. 冒泡排序 思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒.即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换. 代码实现: $arr=array(1,43,54,62,21,66,32,78,36,76,39);  function bubbleSort($arr){    $l

Java实现的各种排序算法(插入排序、选择排序算法、冒泡排序算法)_java

一.插入排序算法实现java版本 public static int[] insert_sort(int[] a) { for (int i = 0; i < a.length; i++) { for(int j=i+1;j>0&&j<a.length;j--) { if(a[j]<a[j-1]) { int tmp = a[j]; //这样定义初始化逻辑上是可以的,j变量,每次tmp的值变化的 a[j] = a[j-1]; a[j-1] = tmp; } } }

c#冒泡、快速、选择和插入排序算法的项目应用

在之前的一篇文章里,我们简单地实现了对一维数组的四种排序算法,但是 在实际的项目中,我们排序的方式可能(几乎是一定)不止仅仅按照数字排序, 我们常常按照合适的需要的排序方式进行排序,比如航班信息可能按时间排序, 商品信息可能按价格排序等等.下面改进之前的那一篇"c#实现冒泡.快 速.选择和插入排序算法"里的代码,实现可以对不同对象(实例中是Car )的按照不同排序类型(实例中是价格和名称)的方式排序.好了,Code is cheap.看代码了: using System; using

详解直接插入排序算法与相关的Java版代码实现_java

直接插入排序 直接插入排序的思路很容易理解,它是这样的: 1.把待排序的数组分成已排序和未排序两部分,初始的时候把第一个元素认为是已排好序的. 2.从第二个元素开始,在已排好序的子数组中寻找到该元素合适的位置并插入该位置. 3.重复上述过程直到最后一个元素被插入有序子数组中. 4.排序完成. 示例:思路很简单,但代码并非像冒泡排序那么好写.首先,如何判断合适的位置?大于等于左边.小于等于右边?不行,很多边界条件需要考虑,而且判断次数太多.其次,数组中插入元素,必然需要移动大量元素,如何控制它们的

“插入排序”算法Java语言的实现与详解

插入排序算法是一个对少量元素进行排序的有效算法.插入排序的工作原理与打牌时整理手中的牌的做法类似,开始摸牌时,我们的左手是空的,接着一次从桌上摸起一张牌,并将它插入到左手的正确位置.为了找到这张牌的正确位置,要将它与手中已有的牌从右到左进行比较,无论什么时候手中的牌都是排序好的.     JAVA实现该算法如下: Java代码   public void insertSort(int a[]){           int length=a.length; //数组长度           in

java实现插入排序算法_java

1.算法概念. 每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序. 2.算法思想. 假设待排序的记录存放在数组R[1..n]中.初始时,R[1]自成1个有序区,无序区为R[2..n].从i=2起直至i=n为止,依次将R[i]插入当前的有序区R[1..i-1]中,生成含n个记录的有序区. public static void insertSort(int[] array) { int len = array.length; for (int i = 1; i < len;

JAVA实现插入排序算法

package Utils.Sort; /** *插入排序,要求待排序的数组必须实现Comparable接口 */ public class InsertSort implements SortStrategy { /** *利用插入排序算法对obj进行排序 */ public void sort(Comparable []obj) { if (obj == null) { throw new NullPointerException("The argument can not be null!