Java(8):基础算法(2)--冒泡排序算法 + 选择排序算法 + 插入排序算法

日期:2017/10/28

一、冒泡算法思想:

对于给定的n记录,从第一个开始依次对相邻的两个记录进行比较,若a[j-1] > a[j],那么两者进行交换,,进行了一轮比较后,n个记录的最大将位于第n位;接着,对前(n-1)个记录进行第二轮比较;重复该过程进行到只剩下一个为止。

代码如下:

package com.code.algorithm;

public class BubbleSort {
	public static void main(String[] args){
		int[] a = {88,66,999,45,22,1,35,68,88,44,11,99,85,253,44,56};
		System.out.println("The original array is: "+a);
//		Array.toString(a);
		for(int n: a){
			System.out.print(n+" ");
		}
		Bubble bubble = new Bubble();
		a = bubble.sort(a);
		System.out.println("The subsequent array is:"+a);
		for(int n: a){
			System.out.print(n+" ");
		}	
		System.out.println("\n Bubbletest.sort()");
		Bubbletest.sort();
	}
}
class Bubbletest{
	public static void sort(){
		int[] arr = {88,66,999,45,22,1,35,68,88,44,11,99,85,253,44,56};
		int temp = 0;
		for(int i=0; i<arr.length; i++){
			for(int j = 1; j<arr.length -i; j++){
				if (arr[j-1]>arr[j]){
					temp = arr[j-1];
					arr[j-1] = arr[j];
					arr[j] = temp;
				}
			}
		}
		for (int a=0; a<arr.length; a++){
			System.out.println("序列的第"+a+"元素是:"+arr[a]);
		}
	}
}

class Bubble{
	public static int[] sort(int[] arr){
		int temp = 0;
		for (int a=0; a<arr.length; a++){
			for (int b=1; b<arr.length-a; b++){
				if (arr[b-1] > arr[b]){
					temp = arr[b-1];
					arr[b-1] = arr[b];
					arr[b] = temp;
				}
			}
		}
		for (int a=0; a<arr.length; a++){
			System.out.println("序列的第"+a+"元素是:"+arr[a]);
		}
		System.out.println("foreach..");
		for(int i : arr){
			System.out.print(i+",");
		}
		System.out.println("\n foreach over..");
		return arr;
	}
}


二、选择排序算法思想:

对于给定的一组记录,经过第一轮比较得到最小的记录,然后将该记录与第一个记录位置交换;然后(除去第一个)对其他记录进行第二轮比较,最小与第二个记录位置交换,重复过程至剩下一个。

代码如下:

package com.code.algorithm;
import java.util.Arrays;
class SelectionSort{
	public static void selectionSort(int[] a){
		int n = a.length;
		int lable = 0;
		for (int i = 0; i<n; i++){
			int k = i;
			//find out the smallest one.
			for (int j = i+1;j < n; j++){
				if (a[j] < a[k]){
					k = j;
				}
			}
			if(k < i){
				int temp = a[i];
				a[i] = a[k];
				a[k] = temp;
			}
		}
	}	
public class SelectionSorting {
		public static void main(String[] args) {
			SelectionSort ss = new SelectionSort();
			int[] a = {9,8,7,6,5,4,3,2,1,0};
			ss.selectionSort(a);
		}
	}

三、插入排序算法思想:

从第二个记录开始,与第一个组成子序列,比较选出最小者,插入到最前方(索引为0),此时两个元素为有序序列;然后加入第三个元素组成新的序列,根据大小将其插入到有序序列中;依次插入所有元素后,直至停止。

代码如下:

package com.code.algorithm;

import java.util.Arrays;

/*
 * 下面是两个例子:直接插入StrightInsertionSort定义在另一个类里面,另一种插入排序方法则是定义在同一个类中
 * */

public class StrightInsertion {
	int k ;
	public static void main(String[] args){
		int[] arr = {12,15,13,46,55,1,5,3};
//		StrightInsertionSort  sis = new StrightInsertionSort();
//		sis.strightinsertion(arr);
//		System.out.println("********");
//		strightinsertion(arr);
		StrightInsertionSort si = new StrightInsertionSort();
		int i = 0;
		int n = arr.length;
		si.strightInsertion(arr);
		try{
			while(i++ < n){
				System.out.print(arr[i]+" ");
			}
		}catch (Exception e){
			e.printStackTrace();
		}finally{
			System.out.println("end.");
		}
	}

	public void a(){}
	public static void strightinsertion(int [] arr){
		int tmp ;
		//不能对非静态字段 k 进行静态引用
//		k = 10;
		//不能对类型 StrightInsertion 中的非静态方法 a()进行静态引用
//		a();
		for (int i=1; i<arr.length; i++){
			for(int j=i; j>0; j--){
				if (arr[j]<arr[j-1]){
					tmp = arr[j-1];
					arr[j-1] = arr[j];
					arr[j] = tmp;
				}
			}
		}
		System.out.println(Arrays.toString(arr));
	}

}

class StrightInsertionSort{
	public final void strightInsertion(int [] arr){
		if( arr != null){
			int n = arr.length;
			for(int i=1; i < n; i++){
				int temp = arr[i] ;
				int j = i;
				if (arr[j-1] > temp){
					while(j > 0 && arr[j-1] > temp){
						arr[j] = arr[j -1];
						j--;
					}
				}
				arr[j] = temp;
			}			
		}
	}
}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值