java基础四(算法)

1. 冒泡排序 

2.直接选择排序

3.反转排序

 

1. 冒泡排序 

            比较相邻的元素。如果第一个比第二个大,就交换他们两个。

            对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

            针对所有的元素重复以上的步骤,除了最后一个。

            持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

来源:https://blog.youkuaiyun.com/qq_41679818/article/details/90296399

public class demo_sort {
    public static void main(String[] args) {
        //冒泡排序算法
        int[] numbers=new int[]{1,5,8,2,3,9,4};
        int i,j;
        for(i=0;i<numbers.length-1;i++)
        {
            for(j=0;j<numbers.length-1-i;j++)
            {
                if(numbers[j]>numbers[j+1])
                {
                    int temp=numbers[j];
                    numbers[j]=numbers[j+1];
                    numbers[j+1]=temp;
                }
            }
        }
        System.out.println("从小到大排序后的结果是:");
        for(i=0;i<numbers.length;i++)
            System.out.print(numbers[i]+" ");
    }
}

2.直接选择排序

基本思想:
直接选择排序的基本思想是将指定排序位置与其他数组元素分别对比,如果满足条件就交换元素值,注意这里区别冒泡排序,不是交换相邻元素,而是把满足条件的元素与指定的排序位置交换(如从最后一个元素开始排序),这样排序好的位置逐渐扩大,最后整个数组都成为已排序好的格式。

简单来说就是,比如对一个数组进行从小到大排序,拿第1个和第2个元素进行对比,把大的元素对应的位置序号记下,再拿较大的与下一个比较,把两者中大的序号标记下,比较完所有的元素后,将最大的与数组最后一位进行交换;然后再重新进行第2轮比较,不过这次比较的长度减1,以次类推。
算法示例:
初始数组资源
【 63 ,4 , 24 , 1 , 3 , 15 】
【 15 , 4, 24, 1, 3 , 】, 63
【 15 ,4 , 3 ,1 , 】, 24 ,63
【 1 , 4 , 3 ,】,15 , 24 , 63
【 1 , 3 ,】,4 , 15 , 24 , 63
【 1,】, 3 , 4 , 15 , 24 , 63

https://blog.youkuaiyun.com/DXflighting/article/details/82902569


public class example7 {
public static void main(String[] args){
	int [] a={12,87,11,78,14,65,62}; //创建一个乱序的数组
example7 sort1=new example7();       //创建直接排序类的对象
sort1.sort(a);                       //调用排序对象的方法将数组排序
}
public void sort(int[] a){
	int index;
	for(int i=1;i<a.length;i++){
		index=0;
		for(int j=1;j<=a.length-i;j++){
			if(a[j]>a[index])
				index=j;
		}
	//交换在位置a.length-i和index(最大值)上的两个数
		int temp=a[a.length-i];      //把第一个元素值保存到临时变量
		a[a.length-i]=a[index];      //把第二个 元素值保存到第一个元素单元中
		a[index]=temp;               //把临时变量也就是第一个元素原值保存到第二个元素中
		
	}
  showArrays(a);                     //输出直接选择排序后的数组值
 }
public void showArrays(int[] a){    //遍历数组
for(int i=0;i<a.length;i++){
	System.out.print(a[i]+" ");
}
}
}

 

3.反转排序

反转排序就是以相反的顺序把原有数组的内容重新排序。

反转排序的基本思想比较简单,其实现思路是把数组最后一个元素与第一个元素替换,倒数第二个元素与第二个元素替换,依此类推,直到把所有数组元素反转替换。

说明:

如果原数组就没有排序,只能说该方法只是实现了反转,而没有排序。如果要反转排序,则先对数组进行排序,后再用这个算法进行反转,这才是反转+排序。

https://blog.youkuaiyun.com/a15028596338/article/details/82595526

public class ReverseSort {
 
    public static void main(String[] args) {
        int arr[]= {10,20,30,40,50,60};
        ReverseSort sort=new ReverseSort();
        sort.sort(arr);
    }
    public void sort(int[]array) {
        int temp;
        int len=array.length;
        for (int i = 0; i < len/2; i++) {
            temp=array[i];
            array[i]=array[len-1-i];
            array[len-1-i]=temp;
        }
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值