导航:首页 > 编程语言 > 排序问题java

排序问题java

发布时间:2023-02-03 16:32:20

‘壹’ java数组排序问题

public static void chineseOrder(){
String str = "田,赵,李,寒,欧阳";
String[] strs = str.split(",");
Arrays.sort(strs);
List<String> list = new ArrayList<String>();
for(int i=strs.length-1;i>-1;i--){
list.add(strs[i]);
}
System.out.println(list.toString());

}

‘贰’ JAVA排序问题

说思路,不提供代码!
排序两种方式:

排序方式1:
1.角色类实现Comparable接口,重写compareTo方法
a.角色优先比较
字符串比较返回int类型:int=角色2对比角色4(注:实际你这个在比较后面的数字,提出来更好比较)
判断,如果返回的int值不等0直接返回这个int值,否者证明角色名字相同,继续向下比较

b.对比2010-01-01与2010-09-22这样的字符串,其实判断这个方法挺多,你这个01大于09
遍历字符串用字符对比即可,遍历过程判断大小,如果遍历完毕,还不能有结果
证明这2个字符串相同,如果不同,直接返回你想要的即可,如果相同继续向下比较!

c.如果b过程是一样,就开始比较最后面的年月日,遍历过程,同b一样,

注意:b和c对比的可以使用字符串对比,也可以正则提取里面的数字,使用数字对比!
也可以使用日期类格式化直接比较毫秒数,方法挺多!

以上为你的角色类自带比较行为,可以使用集合工具直接对其排序,如果你使用的TreeSet或者
TreeMap,在存入的过程,会自动排序的!


排序方式2:
如果你的类没有实现Comparable接口,可以在你的集合初始化的时候,传入一个比较器即可
既:写一个匿名类,Comparator重写compare方法,让集合自身具备比较行为
泛型传入你这个角色类,
其方法内部进行比较行为,和上面,第一种方法,完全一样!

‘叁’ java算法面试题:排序都有哪几种方法

一、冒泡排序
[java] view plain
package sort.bubble;
import java.util.Random;
/**
* 依次比较相邻的两个数,将小数放在前面,大数放在后面
* 冒泡排序,具有稳定性
* 时间复杂度为O(n^2)
* 不及堆排序,快速排序O(nlogn,底数为2)
* @author liangge
*
*/
public class Main {
public static void main(String[] args) {
Random ran = new Random();
int[] sort = new int[10];
for(int i = 0 ; i < 10 ; i++){
sort[i] = ran.nextInt(50);
}
System.out.print("排序前的数组为");
for(int i : sort){
System.out.print(i+" ");
}
buddleSort(sort);
System.out.println();
System.out.print("排序后的数组为");
for(int i : sort){
System.out.print(i+" ");
}
}
/**
* 冒泡排序
* @param sort
*/
private static void buddleSort(int[] sort){
for(int i=1;i<sort.length;i++){
for(int j=0;j<sort.length-i;j++){
if(sort[j]>sort[j+1]){
int temp = sort[j+1];
sort[j+1] = sort[j];
sort[j] = temp;
}
}
}
}
}
二、选择排序
[java] view plain
package sort.select;
import java.util.Random;
/**
* 选择排序
* 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,
* 顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
* 选择排序是不稳定的排序方法。
* @author liangge
*
*/
public class Main {
public static void main(String[] args) {
Random ran = new Random();
int[] sort = new int[10];
for (int i = 0; i < 10; i++) {
sort[i] = ran.nextInt(50);
}
System.out.print("排序前的数组为");
for (int i : sort) {
System.out.print(i + " ");
}
selectSort(sort);
System.out.println();
System.out.print("排序后的数组为");
for (int i : sort) {
System.out.print(i + " ");
}
}
/**
* 选择排序
* @param sort
*/
private static void selectSort(int[] sort){
for(int i =0;i<sort.length-1;i++){
for(int j = i+1;j<sort.length;j++){
if(sort[j]<sort[i]){
int temp = sort[j];
sort[j] = sort[i];
sort[i] = temp;
}
}
}
}
}
三、快速排序
[java] view plain
package sort.quick;
/**
* 快速排序 通过一趟排序将要排序的数据分割成独立的两部分, 其中一部分的所有数据都比另外一部分的所有数据都要小,
* 然后再按此方法对这两部分数据分别进行快速排序, 整个排序过程可以递归进行,以此达到整个数据变成有序序列。
* @author liangge
*
*/
public class Main {
public static void main(String[] args) {
int[] sort = { 54, 31, 89, 33, 66, 12, 68, 20 };
System.out.print("排序前的数组为:");
for (int data : sort) {
System.out.print(data + " ");
}
System.out.println();
quickSort(sort, 0, sort.length - 1);
System.out.print("排序后的数组为:");
for (int data : sort) {
System.out.print(data + " ");
}
}
/**
* 快速排序
* @param sort 要排序的数组
* @param start 排序的开始座标
* @param end 排序的结束座标
*/
public static void quickSort(int[] sort, int start, int end) {
// 设置关键数据key为要排序数组的第一个元素,
// 即第一趟排序后,key右边的数全部比key大,key左边的数全部比key小
int key = sort[start];
// 设置数组左边的索引,往右移动判断比key大的数
int i = start;
// 设置数组右边的索引,往左移动判断比key小的数
int j = end;
// 如果左边索引比右边索引小,则还有数据没有排序
while (i < j) {
while (sort[j] > key && j > start) {
j--;
}
while (sort[i] < key && i < end) {
i++;
}
if (i < j) {
int temp = sort[i];
sort[i] = sort[j];
sort[j] = temp;
}
}
// 如果左边索引比右边索引要大,说明第一次排序完成,将sort[j]与key对换,
// 即保持了key左边的数比key小,key右边的数比key大
if (i > j) {
int temp = sort[j];
sort[j] = sort[start];
sort[start] = temp;
}
//递归调用
if (j > start && j < end) {
quickSort(sort, start, j - 1);
quickSort(sort, j + 1, end);
}
}
}
[java] view plain
/**
* 快速排序
*
* @param a
* @param low
* @param high
* voidTest
*/
public static void kuaisuSort(int[] a, int low, int high)
{
if (low >= high)
{
return;
}
if ((high - low) == 1)
{
if (a[low] > a[high])
{
swap(a, low, high);
return;
}
}
int key = a[low];
int left = low + 1;
int right = high;
while (left < right)
{
while (left < right && left <= high)// 左边向右
{
if (a[left] >= key)
{
break;
}
left++;
}
while (right >= left && right > low)
{
if (a[right] <= key)
{
break;
}
right--;
}
if (left < right)
{
swap(a, left, right);
}
}
swap(a, low, right);
kuaisuSort(a, low, right);
kuaisuSort(a, right + 1, high);
}
四、插入排序
[java] view plain
package sort.insert;
/**
* 直接插入排序
* 将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据
* 算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。
*/
import java.util.Random;
public class DirectMain {
public static void main(String[] args) {
Random ran = new Random();
int[] sort = new int[10];
for (int i = 0; i < 10; i++) {
sort[i] = ran.nextInt(50);
}
System.out.print("排序前的数组为");
for (int i : sort) {
System.out.print(i + " ");
}
directInsertSort(sort);
System.out.println();
System.out.print("排序后的数组为");
for (int i : sort) {
System.out.print(i + " ");
}
}
/**
* 直接插入排序
*
* @param sort
*/
private static void directInsertSort(int[] sort) {
for (int i = 1; i < sort.length; i++) {
int index = i - 1;
int temp = sort[i];
while (index >= 0 && sort[index] > temp) {
sort[index + 1] = sort[index];
index--;
}
sort[index + 1] = temp;
}
}
}
顺便添加一份,差不多的
[java] view plain
public static void charuSort(int[] a)
{
int len = a.length;
for (int i = 1; i < len; i++)
{
int j;
int temp = a[i];
for (j = i; j > 0; j--)//遍历i之前的数字
{
//如果之前的数字大于后面的数字,则把大的值赋到后面
if (a[j - 1] > temp)
{
a[j] = a[j - 1];
} else
{
break;
}
}
a[j] = temp;
}
}
把上面整合起来的一份写法:
[java] view plain
/**
* 插入排序:
*
*/
public class InsertSort {
public void sort(int[] data) {
for (int i = 1; i < data.length; i++) {
for (int j = i; (j > 0) && (data[j] < data[j - 1]); j--) {
swap(data, j, j - 1);
}
}
}
private void swap(int[] data, int i, int j) {
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
五、顺便贴个二分搜索法
[java] view plain
package search.binary;
public class Main {
public static void main(String[] args) {
int[] sort = {1,2,3,4,5,6,7,8,9,10};
int mask = binarySearch(sort,6);
System.out.println(mask);
}
/**
* 二分搜索法,返回座标,不存在返回-1
* @param sort
* @return
*/
private static int binarySearch(int[] sort,int data){
if(data<sort[0] || data>sort[sort.length-1]){
return -1;
}
int begin = 0;
int end = sort.length;
int mid = (begin+end)/2;
while(begin <= end){
mid = (begin+end)/2;
if(data > sort[mid]){
begin = mid + 1;
}else if(data < sort[mid]){
end = mid - 1;
}else{
return mid;
}
}
return -1;
}
}

‘肆’ Java排序问题

你在两端代码中,主要都是调用Arrays.sort(stu);只要数据相同,结果都是一样。

如果只是调用sort是不符合题目要求的。

‘伍’ java实现日期排序问题

java按文件日期排序方法,下面以对C盘Java目录下文件进行按日期排序为例:

//引用java.io包里的所有类
importjava.io.*;
importjava.util.*;
publicclassFileOrder{
//按日期排序
publicstaticvoidorderByDate(StringfliePath){
Filefile=newFile(fliePath);
File[]fs=file.listFiles();
Arrays.sort(fs,newComparator<File>(){
publicintcompare(Filef1,Filef2){
longdiff=f1.lastModified()-f2.lastModified();
if(diff>0)
return1;
elseif(diff==0)
return0;
else
return-1;
}
publicbooleanequals(Objectobj){
returntrue;
}

});
for(inti=fs.length-1;i>-1;i--){
System.out.println(fs[i].getName());
System.out.println(newDate(fs[i].lastModified()));
}
}
publicstaticvoidmain(Stringargs[]){
orderByDate("c:/java");//调用方法对c:/java目录下文件按日期排序
}
}

‘陆’ java:字符串排序问题

public class test{
public static void main(String[] args) {
String[] str = {"acbcc","bgd","abvc","fkei","dsad","gt"};
String temp;
System.out.print("排序前数组:");
for (int i = 0; i < str.length; i++) {
System.out.print(str[i]+"\t");
}
System.out.println("");
for (int i = 0; i < str.length; i++) {
for (int j = 0; j < str.length - i - 1; j++) {
/**冒泡排序比较说明:
1.先取出每一个元素字符串第一个字符(substring(0,1)这个就是取第一个元素的字符)
2.然后将这个字符串转换成char型(charAt(0)这个就是将一个单字符串转换成char型)
3.接着将char型字符转换成整型(这一步只要是求一个字符的ASCII码,因为ASCII码是一个整型数字,这样做是便于比较)
4.最后通过比较使用冒泡排序
*/
if ((int)(str[j].substring(0,1).charAt(0)) > (int)(str[j+1].substring(0,1).charAt(0))) {
temp = str[j];
str[j] = str[j+1];
str[j+1] = temp;
}
}
}
System.out.print("排序后数组:");
for (int i = 0; i < str.length; i++) {
System.out.print(str[i]+"\t");
}
}
}

‘柒’ java排序问题

如有帮助,望采纳。姓名相同,暂时按总分最高输出,姓名总分一样不改变读入顺序。
import java.util.Arrays;
import java.util.Scanner;

class student implements Comparable<student>{
String name="";
int scoreEnglish=0;
int scoreComputer=0;

@Override
public int compareTo(student s) {
if(this.name.compareTo(s.name)<0){
return -1;//升序;
}
else if(this.name.compareTo(s.name)>0){
return 1;
}
else {
return (s.scoreEnglish+s.scoreComputer)-(this.scoreEnglish+this.scoreComputer);
}
}

@Override
public String toString() {
return "student{" +
"name='" + name + '\'' +
", scoreEnglish=" + scoreEnglish +
", scoreComputer=" + scoreComputer +
'}';
}
}

public class Sort {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);

student[] stu = new student[5];
for(int i=0;i<5;i++){
stu[i] = new student();
stu[i].name = sc.next();
stu[i].scoreEnglish = sc.nextInt();
stu[i].scoreComputer = sc.nextInt();
}

Arrays.sort(stu);
for(int i=0;i<5;i++){
System.out.println(stu[i].toString());
}

}

}

阅读全文

与排序问题java相关的资料

热点内容
文件夹防水吗 浏览:688
单片机中晶振电路及参数 浏览:518
光遇万圣节安卓到什么时候 浏览:378
市场分析少儿编程 浏览:784
大神机床编程 浏览:155
python保存文件为pdf 浏览:133
金融可以pdf 浏览:229
电梯里的文件夹 浏览:802
光遇安卓手机怎么同意苹果好友 浏览:161
疫情命令照片 浏览:96
画世界的app叫什么 浏览:826
vc6编译时显示无法执行 浏览:547
java动态初始化数组 浏览:638
概率论与数理统计答案pdf 浏览:681
得物app上面的鞋为什么这么贵 浏览:909
如何从爱思服务器注销游戏账号 浏览:944
幼儿编程教育培训多少钱 浏览:406
经常生气有什么东西能解压 浏览:903
代理服务器地址和端口可以怎么填 浏览:65
unity5手游编译模型 浏览:268