字符串数组排序-方法详解

创建一个长度是8的字符串数组
使用8个长度是5的随机字符串初始化这个数组
对这个数组进行排序,按照每个字符串的首字母排序(无视大小写)

注1: 不能使用Arrays.sort() 要自己写
注2: 无视大小写,即 Axxxx 和 axxxxx 没有先后顺序

package day6;

import java.util.Arrays;

/*
 * 创建一个长度是8的字符串数组
使用8个长度是5的随机字符串初始化这个数组
对这个数组进行排序,按照每个字符串的首字母排序(无视大小写)

注1: 不能使用Arrays.sort() 要自己写
注2: 无视大小写,即 Axxxx 和 axxxxx 没有先后顺序
 */
public class TestNumber9 {
     

	public static void main(String[] args) {
     
		
		String []ss= new String[8];//创建长度为8的字符串数组,每个位置都是一个字符串
		for(int i =0;i<ss.length;i++)
		{
     
			String randomString=randomString(5);//定义一个字符串变量接收randomString()方法产生的字符串
			ss[i]=randomString;//为数组的每一个位置赋一个长度为5的随机字符串,这个随机字符串由字母和数字随即组成,就形成了字符串数组
		}
		System.out.println("未排序的字符串数组:");
		System.out.println(Arrays.toString(ss));//这里如果直接填ss,会输出[Ljava.lang.String;@106d69c,也就是这个字符串数组的地址,这一点要十分注意
		//为了能够输出这个字符串数组,应该使用Arrays.toString(ss)
		//Arrays.toString()是用来将字符串数组转换成String类型输出的,入参可以是long,float,double,int,boolean,byte,object型的数组。
		
		
		//因为采用了冒泡法进行排序的思想,也就是相邻两个位置的数组的首字母进行比较,这里就要做一个for循环的嵌套模式
		//冒泡排序思想:冒泡排序的基本思想就是:从无序序列头部开始,进行两两比较,根据大小交换位置,直到最后将最大(小)的数据元素交换到了无序队列的队尾,
		//从而成为有序序列的一部分;下一次继续这个过程,直到所有数据元素都排好序。
		//算法的核心在于每次通过两两比较交换位置,选出剩余无序序列里最大(小)的数据元素放到队尾。

		for(int j =0;j<ss.length;j++){
     //第一层其实就是冒泡排序的第i轮
			for(int i =0;i<ss.length-j-1;i++){
     //第二层其实就是第i轮排序的过程
				char firstchar1 = ss[i].charAt(0);//这里是将每个位置的字符串的首字母单独赋值给变量firstchar1和firstchar2
													//CharAt() 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1
				char firstchar2 =ss[i+1].charAt(0);
				firstchar1 = Character.toLowerCase(firstchar1);//将首字母统统转成小写,也就是题目中要求的忽略大小写
				firstchar2 = Character.toLowerCase(firstchar2);
				if(firstchar1>firstchar2){
     //将i和i+1位置的字母进行比较,并排序
					String temp = ss[i];
		            ss[i]=ss[i+1];
		            ss[i+1]=temp;
					
				}
			}
		}
		System.out.println("输出排序后的字符串数组:");
		System.out.print(Arrays.toString(ss));
	}
	private static String randomString(int length){
     //randomString函数的内容:生成长度为5的随机字符串
		String pool = "";//定义一个字符串为空
		for(short i ='0';i<='9';i++){
     //进行字符串拼接
			pool+=(char) i;
		}
		for(short i ='a';i<='z';i++){
     
			pool+=(char) i;
		}
		for(short i ='A';i<='Z';i++){
     
			pool+=(char) i;
		}
		char cs[]= new char[length];//定义数组,每个位置都是一个字符
		for(int i =0;i<cs.length;i++){
     //定义一个for循环,遍历cs数组的每一个位置、
			//这里定义了数组的下标index
			int index = (int)(Math.random()*(pool.length()));//Math.random()的范围是0-1
			//这里通过random函数随机分配数组的下标Index
			cs[i]= pool.charAt(index);//将随即分配字符串pool的下标index代表的字符分给cs数组的每一个位置
		}//CharAt() 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1
		String result = new String(cs);//将数组转换成字符串
		return result;//返回这个字符串
	}
}

你可能感兴趣的:(字符串,算法,数据结构,java)