简单的实现排序,可以参考如下的代码
import java.text.Collatorimport java.util.Arrays
import java.util.Comparator
import java.util.Locale
public class PYDemo {
public static void main(String[] args) {
String[] names= {"赵z子z龙l","刘l备b","关g羽y","张z飞f"}
System.out.println("排序前"+Arrays.toString(names))
Comparator cpt = Collator.getInstance(Locale.CHINA)
Arrays.sort(names, cpt)
System.out.println("排序后"+Arrays.toString(names))
}
}
测试输出
排序前[赵z子z龙l, 刘l备b, 关g羽y, 张z飞f]排序后[关g羽y, 刘l备b, 张z飞f, 赵z子z龙l]
如果有一些非常用的汉字,生僻字等,建议使用一些jar包实现,比如pinyin4j
#include <stdio.h>#include <string.h>
#define MAX_NAME 20 //最大名字长度
#define MAX_NUM100 //最大学生人数
void sort_bubble(char (*pc)[MAX_NAME],int n)//排序函数
{
int i,j
char str[MAX_NAME]
for(i=0i<n-1i++)
{
for(j=i+1j<nj++)
{
if(strcmp(pc[i],pc[j])>0)
{
strcpy(str,pc[i])
strcpy(pc[i],pc[j])
strcpy(pc[j],str)
}
}
}
}
void display_name(char (*pc)[MAX_NAME],int n)//显示这n个姓名
{
int i
for(i=0i<ni++)
{
printf("%s\n",pc[i])
}
}
int main()
{
int i=1,n
char str[MAX_NUM][MAX_NAME]
printf("请输入学生总数:")
scanf("%d",&n)
while(i<=n)
{
printf("请输入第%d个学生姓名:",i)
scanf("%s",str[i++-1])
}
printf("排序前的学生名单如下:\n")
display_name(str,n)
sort_bubble(str,n)
printf("排序后的学生名单如下:\n")
display_name(str,n)
return 0
}
说明:
1:采用的是冒泡排序,用快速排序当然快些,但我忘了
2:已验证通过,结果正确。
3:随意输入人数和姓名,只要数组不越界就没有问题!
4:两个函数:排序和显示
5:给分+好评
对汉字是按拼音排序的,示例:import java.util.*import java.text.*public class Test{
public static void main(String args[]) {
//Comparator cmp = (RuleBasedCollator)java.text.Collator.getInstance(java.util.Locale.CHINA)//try testing various locales
Comparator cmp = java.text.Collator.getInstance(java.util.Locale.CHINA)//try testing various locales
String[] arr = {"张三", "李四", "张", "王"}
java.util.Arrays.sort(arr, cmp)
for (int i = 0i <arr.lengthi++)
System.out.println(arr[i])
Comparator cmp2 = java.text.Collator.getInstance()//try default locale
String[] arr2 = {"我", "是", "草", "吗"}
java.util.Arrays.sort(arr2, cmp2)
for (int i = 0i <arr2.lengthi++)
System.out.println(arr2[i])
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)