JAVA学习代码——数组排序

排序算法:Paixusuanfa.java

package 数组_排序;

//数组的几种排序算法的实现
public class Paixusuanfa {
	/*选择法排序:  假定有n个数的序列,要求按递增次序排序,算法步骤:
	(1)从n个数中选出最小数的下标,将最小数与第一个数交换位置;  
	(2)除第一个数外,其余n-1个数再按方法(1)选出次小的数,与第二个数交换位置; 
	(3)以此类推,最终构成递增序列。  由此可见,数组排序要用两重循环才能实现,内循环选择最小数,
	找到该数在数组中的排列位置;执行n-1次外循环,使n个数都确定了在数组中的排序位置。*/
	public int[] choiceSort(int[] arr){  
    for(int i = 0;i < arr.length;i++){  
        int m = i;  
        for(int j = i + 1;j < arr.length;j++){  
            //如果第j个元素比第m个元素小,将j赋值给m  
            if(arr[j] < arr[m]){  
                m = j;  
            }  
        }  
        //交换m和i两个元素的位置  
        if(i != m){  
            int t = arr[i];  
            arr[i] = arr[m];  
            arr[m] = t;  
        }  
    }  
    return arr;  
}  
	/*冒泡排序法:冒泡法排序与选择法排序类似,选择法排序在每一轮排序时找最小数或最大数的下标,
	   出了内循环再交换最小数的位置,而冒泡法排序时将相邻数比较,次序不对就交换位置,出了内循环
	 最小数或最大数已冒出*/
	public int[] insertSort(int[] arr){  
    for(int i = 1;i < arr.length;i++){  
        int temp = arr[i];  
        int j = i - 1;  
        while(temp < arr[j]){  
            arr[j+1] = arr[j];  
            j--;  
            if(j == -1){  
                break;  
            }  
        }  
        arr[j+1] = temp;  
    }  
    return arr;  
}  
//	插入排序法:将要排序的数组分成两部分,每次从后面的部分取出索引最小的元素插入到前一部分的适当位置。
	/*public int[] insertSort(int[] arr){  
    for(int i = 1;i < arr.length;i++){  
        int temp = arr[i];  
        int j = i - 1;  
        while(temp < arr[j]){  
            arr[j+1] = arr[j];  
            j--;  
            if(j == -1){  
                break;  
            }  
        }  
        arr[j+1] = temp;  
    }  
    return arr;  
}  */
	/*快速排序法:快速排序法号称是目前最优秀的算法之一,实现思路是,将一个数组的排序问题看成是两个小数组
	的排序问题,而每个小的数组又可以继续看成更小的两个数组,一直递归下去,直到数组长度大小最大为2。*/
	public int[] fastSort(int[] arr,int left,int right){  
    if(left < right){  
        int s = arr[left];  
        int i = left;  
        int j = right + 1;  
        while(true){  
            //向右找大于s的元素的索引  
            while(i+1 < arr.length && arr[++i] < s);  
            //向左找小于s的元素的索引  
            while(j-1 > -1 && arr[--j] > s);  
            //如果i >= j 推出循环  
            if(i >= j){  
                break;  
            }else{  
                //教化i和j位置的元素  
                int t = arr[i];  
                arr[i] = arr[j];  
                arr[j] = t;  
            }  
        }  
        arr[left] = arr[j];  
        arr[j] = s;  
        //对左面进行递归  
        fastSort(arr,left,j-1);  
        //对右面进行递归  
        fastSort(arr,j+1,right);  
    }  
    return arr;  
}  
}


将随机数去重后存入数组,数组排序,将数组转换为字符串输出

package 数组_排序;

/**
 * 此代码实现了将随机数去重后存入数组,数组排序,将数组转换为字符串输出
 */

import java.util.Arrays;

public class Suijishu_quchong_zifu {

	public static void main(String[] args) {
		int[] c = new int[10];// 定义一个整型数组
		//int b[] = c;// 引入一个全局变量,将c的值取出
		System.out.print("随机输出10个整数:");
		for (int i = 0; i < c.length; i++) {
			int a = (int) (Math.random() * 100);
			c[i] = a;
			// Math.random():随机输出double数0.00-0.99,*100后就是100以内的整数
			// 将随机产生的整数赋值给数组c

			for (int j = 0; j < i; j++) {
				while (c[i] == c[j]) {
					i--;// 如果重复,数组下标减一,即退回去重新生成随机数
				}
			}
			System.out.print(c[i] + " ");
			// 只产生随机数,不去重(去除重复的值)
			// int[] c;
			// c = new int[10];
			// System.out.print("随机输出10个整数:");
			// for (int a = 0; a < 10; a++) {
			// int i = (int) (Math.random() * 100);
			// // Math.random():随机输出double数0.00-0.99,*100后就是100以内的整数
			// c[i] = a; // 将随机产生的整数赋值给数组c
			// for (int j = 0; j < i; j++) {
			// while (c[i] == c[j]) {
			// i--;// 如果重复,数组下标减一,即退回去重新生成随机数
			// }
			// }
			// System.out.print(c[i] + " ");

		}
		System.out.println("");
		System.out.println("=========================");
		// ====================================下面是数组排序
		int[] d = { 99, 2, 61, 34, 45, 12, 64 };
		System.out.print("排序前为: ");
		for (int j = 0; j < d.length; j++) { // j<c.length:j<数组c的长度
			System.out.print(d[j] + "\t");// 打印数组c[]的值
		}

		// for(int i=0;i<c.length;i++){ //排序
		// for(int j=1;j<=i;j++){
		// if(c[i]>c[j]){
		// int t=0;
		// t=c[i];
		// c[i]=c[j];
		// c[j]=t;
		// }
		// }
		//
		// }
		System.out.println("");
		Arrays.sort(d); // 使用Arrays类的sort()方法对数组进行排序,从小到大排序
		System.out.print("排序后为:");
		for (int j = 0; j < d.length; j++) {
			System.out.print(d[j] + "\t");// 打印排序后数组
		}
		/*
		 * 将数组转换为字符串 语法:Arrays.toString(数组名); 该方法按顺序把多个数组元素连在一起,多个元素之间用逗号加空格隔开
		 */
		System.out.println();
		System.out.println("输出数组score中的元素:" + Arrays.toString(d));
	}

}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值