冒泡,选择,插入排序 java版

公共代码交换两个数的方法:

/**
* 交换两个数的方法
* @param data 交换的数组
* @param i 位置i的数组下标
* @param j 位置j的数组下标
*/
public static void swap(int[] data, int i,int j){
// 当只有是不同一位置的两个数才进行交换
if(i!=j){
int temp = 0;
temp = data[j];
data[j] = data[i];
data[i] = temp;
}
}


1.插入排序:
思想:每步将一个待排序的对象,按其关键码大小,插入到前面已经排好序的一组对象的适当位置上,直到对象全部插入为止。

代码实现:


/**
* 插入排序算法
* 每进行一次排序,就需要将要比较的数与有序的序列进行一一对比
* @param data
* @param n
*/
public static void insertion(int[] data, int n){
for(int i = 0 ; i < data.length;i++){
for(int j = 0 ; j<i;j++){
if(data[i]<data[j]){
swap(data,i,j);
}
}
System.out.println("第"+i+"趟:"+Arrays.toString(data));
}
}


2.选择排序:
思路简单:每经过一趟比较就找出一个最小值,与待排序列最前面的位置互换即可。
——首先,在n个记录中选择最小者放到r[1]位置;然后,从剩余的n-1个记录中选择最小者放到r[2]位置;…如此进行下去,直到全部有序为止。
优点:实现简单
缺点:每趟只能确定一个元素,表长为n时需要n-1趟
前提:顺序存储结构



/**
* 选择排序算法
* 每经过一趟比较就找出一个最小值,与待排序列最前面的位置互换即可
* @param data
* @param n
*/
public static void select(int[] data, int n){
for(int i = 0 ; i < data.length; i++){
int min = i;
for (int j = i+1; j<data.length; j++){
if(data[j]<data[min]){
min = j;
}
}
if(i!=min){
swap(data,min,i);
}
System.out.println("第"+i+"趟:"+Arrays.toString(data));
}
}



冒泡排序:
基本思路:每趟不断将记录两两比较,并按“前小后大”(或“前大后小”)规则交换。(逆序则交换)
优点:每趟结束时,不仅能挤出一个最大值到最后面位置,还能同时部分理顺其他元素;一旦下趟没有交换发生,还可以提前结束排序。
前提:顺序存储结构

/**
* 冒泡排序算法
* 每次都是进行相邻两个数的比较,每比较一次,比较的个数就变少一个
* @param data
* @param n
*/
public static void bubble(int[] data, int n){
for(int i = 1; i <=data.length; i++){
for(int j = 0; j<(data.length-i);j++){
if(data[j]>data[j+1]){
swap(data,j,j+1);
}
}
System.out.println("第"+i+"趟:"+Arrays.toString(data));
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值