Java实现冒泡排序、选择排序、插入排序

冒泡排序:是一种简单的排序算法,需要重复的访问要排序的元素序列,不断地比较相邻的元素。如果相邻的元素满足了比较的条件,如前一个数据大于(或小于)后一个数据,则交换元素的顺序,使较大(或较小)的数据向后移。同样,再使这个较大(或较小)的数据与下一个相邻的元素比较。依此类推,比较到序列的末尾,得到一个最大(最小)的值。前面剩下的元素,重复之前的操作比较。直到得到一个排好序的序列。稳定排序算法,平均算法复杂度为O(n²)。

例如:序列 3 ,1,4,2,5
form Student Qin
由上图可知,经过四次比较,得到一个最大值5。
核心代码:

		for(i=0;i<N-1;i++) {
			for(j=0;j<N-i-1;j++) {
				if(sortArray[j] > sortArray[j+1]) {
					int temp;
					temp = sortArray[j+1];
					sortArray[j+1] = sortArray[j];
					sortArray[j] = temp;				
				}			
			}

选择排序:简单排序算法,是从未排序的序列中,指定一个元素,用这个元素依次与剩余的元素比较,得到一个最大(或最小)元素,放在序列的首部(或尾部)。再从剩下的元素中指定一个元素,与剩下的比较,再得到一个值。依此类推,最后得到一个排好序的序列。不稳定排序算法,平均算法复杂度为O(nlgn)。

例如:序列 3 ,1,4,2,5
form Student Qin
核心代码:

		for(i=0;i<N-1;i++) {
				for(j=i+1;j<N;j++) {
					if(sortArray[i] > sortArray[j]) {
						int temp;
						temp = sortArray[j];
						sortArray[j] = sortArray[i];
						sortArray[i] = temp;
					}
				}

插入排序:也是一种简单且稳定的排序算法,平均算法时间复杂度同冒泡排序一样为O(n²)。这个算法像整理桥牌的方法一样,将每一张牌插入到其他已经有序的牌中的适当位置。可以将待排序的序列看成两个序列:一个有序序列,一个无序序列,算法的实现过程就是将无序序列中的元素插入到有序序列中,所以在插入时,需要将插入位置后面的元素后移,腾出空间放插入的元素。带插入的元素需要与有序序列中的元素比较,若小于(或大于)有序序列中的元素,则插入到该元素的左边;刚开始时,通常将第一个元素放进有序序列中。

例如:序列 3 ,1,4,2,5
form Student Qin
核心代码:

		for(i=1;i<N;i++) {
			if(sortArray[i] < sortArray[i-1]) {//当前数小于前一个数
				int temp = sortArray[i];//保存当前值
				for(j=i-1; j>=0&&sortArray[j]>temp; j--) {
					sortArray[j+1] = sortArray[j];
				}
				sortArray[j+1] = temp;
			}
		}

实现代码:

package List;

import java.util.Scanner;
/*
 * from Student Qin
 */
public class Sort {
	int N = 5;
	int[] sortArray = new int[N];
	public void sArray() {
		int i;
		System.out.println("请输入排序序列:");
		Scanner sc = new Scanner(System.in);//从控制台中获取数据
		for(i=0;i<N;i++)
				sortArray[i] = sc.nextInt();
	}
	/*
	 * 冒泡排序
	 * from Student Qin
	 */
	public void bubbleSort() {
		int i,j;
		for(i=0;i<N;i++) {
			for(j=0;j<N-i-1;j++) {
				if(sortArray[j] > sortArray[j+1]) {
					int temp;
					temp = sortArray[j+1];
					sortArray[j+1] = sortArray[j];
					sortArray[j] = temp;				
				}			
			}
		}
		System.out.println("冒泡排序:");
		printArray();
	}
	/*
	 * 选择排序
	 * from Student Qin
	 */
	public void selectSort() {
		int i,j;
		for(i=0;i<N;i++) {
				for(j=i+1;j<N;j++) {
					if(sortArray[i] < sortArray[j]) {
						int temp;
						temp = sortArray[j];
						sortArray[j] = sortArray[i];
						sortArray[i] = temp;
					}
				}
		}
		System.out.println("选择排序:");
		printArray();
	}
	/*
	 * 插入排序
	 * from Student Qin
	 */
	public void insertSort() {
		int i,j;
		for(i=1;i<N;i++) {
			if(sortArray[i] < sortArray[i-1]) {//当前数小于前一个数
				int temp = sortArray[i];//保存当前值
				for(j=i-1; j>=0&&sortArray[j]>temp; j--) {
					sortArray[j+1] = sortArray[j];
				}
				sortArray[j+1] = temp;
			}
		}
		System.out.println("插入排序:");
		printArray();
	}
	
	public void printArray() {
		int i;
		for(i=0;i<N;i++) {
			System.out.print(sortArray[i]+"\t");
		}
		System.out.print("\n");
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Sort st = new Sort();
		st.sArray();
		st.bubbleSort();
		st.selectSort();
		st.insertSort();
	}

}

结果:
form Student Qin

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值