java算法

1.冒泡排序算法:

<span style="font-size:14px;">从小到大排:
public static void main(String[] args) {
    int [] x={23,54,12,22,7,0,99,34,101};
</span><pre class="brush:java;">  // 1.把第1个数拿出来,和后面的所有数比较,比后面的大就交换位置
  // 2.把第2个数拿出来,和后面的所有数比较,比后面的大就交换位置
  // 3.把第n-1个数拿出来,和后面的所有数比较,比后面的大就交换位置
 for (int i = 0; i < x.length; i++) { for (int j = i+1; j < x.length; j++) { if (x[j]<x[i]) { //定义一个变量,把数组i位置的值赋给它 int temp=x[i]; //把数组j位置的值赋到数组i位置上 x[i]=x[j];//把原来数组i位置的值赋到数组j位置上 x[j]=temp;}}}//打印结果for (int i : x) {System.out.print("--"+i);}}

 
输出结果为:--0--7--12--22--23--34--54--99--101 

<span style="font-size:14px;">从大到小排:
public static void main(String[] args) {
   int [] x={23,54,12,22,7,0,99,34,101};
   for (int i = 0; i < x.length; i++) {
	for (int j = i+1; j < x.length; j++) {
		if (x[j]>x[i]) {
		//定义一个变量,把数组i位置的值赋给它
			int temp=x[j];
					
		//把数组j位置的值赋到数组i位置上
			x[j]=x[i];
					
		//把原来数组i位置的值赋到数组j位置上
			x[i]=temp;
			}
		}
	}
	//循环打印从大到小
	for (int i : x) {
			
		System.out.print("--"+i);
	}
 }</span>
输出结果为:--101--99--54--34--23--22--12--7--0

2.选择排序算法:

public static void main(String[] args) {
		int [] x={23,54,12,22,7,0,99,34,101};
		for (int i = 0; i < x.length; i++) {
            int lowerIndex = i;
            // 找出最小的一个索引
            for (int j = i + 1; j < x.length; j++) {
                if (x[j] < x[lowerIndex]) {
                    lowerIndex = j;
                }
            }
            // 交换
            int temp = x[i];
            x[i] = x[lowerIndex];
            x[lowerIndex] = temp;
        }
        for (int i : x) {
            System.out.print(i + " ");
        }
}
结果为:0 7 12 22 23 34 54 99 101

冒泡排序和选择排序是排序算法中比较简单和容易实现的算法。冒泡排序的思想为:每一次排序过程,通过相邻元素的交换,将当前没有排好序中的最大(小)移到数组的最右(左)端。而选择排序的思想也很直观:每一次排序过程,我们获取当前没有排好序中的最大(小)的元素和数组最右(左)端的元素交换,循环这个过程即可实现对整个数组排序。


3.插入排序

      有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序。

public static void main(String[] args) {
        int [] x={0,54,12,22,7,24,99,34,101};
        //因为第一个数固定好了,所以从i=1开始
        for (int i = 1; i < x.length; i++) {
           
            for (int j = i; j > 0; j--) {
                if (x[j] < x[j-1]) {
                    //交换位置
                    int temp=x[j];
                    
                    x[j]=x[j-1];
                    
                    x[j-1]=temp;
                }
            }
        }
        for (int i : x) {
            System.out.print(i + " ");
        }
}
输出结果为:0 7 12 22 24 34 54 99 101

4.水桶排序

<span style="font-size:14px;">public static void main(String[] args) {
    // 水桶排序
    // 假设所有的数字在[0-100)之间
	int [] nums={23,54,12,22,7,0,99,34,98};;
	// 建水桶
	 int[] bucket = new int[100];
	 for (int num : nums) {
	    bucket[num]++;
		 }
	 // 装回去
        int index = 0;
        for (int i = 0; i < bucket.length; i++) {
        for (int j = 0; j < bucket[i]; j++) {
        nums[index++] = i;
		 }
	 }
	// 打印
	System.out.println(Arrays.toString(nums));
	}</span>
输出结果为:[0, 7, 12, 22, 23, 34, 54, 98, 99]








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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值