導航:首頁 > 編程語言 > 排序問題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相關的資料

熱點內容
對加密視頻進行解密並存儲 瀏覽:478
轉生魅魔無刪減版:奇幻冒險的世界 瀏覽:459
男人j進入女人j內部免費網站 瀏覽:418
畫怖:用繪畫勾勒恐怖的場景 瀏覽:257
維沃手機安卓80什麼時候推送 瀏覽:140
秘密搜查:犯罪背後的真相 瀏覽:979
微信放在華為哪個文件夾 瀏覽:571
散場後pop音樂:獨特魅力和影響力 瀏覽:28
光頭強:一個受歡迎的動畫形象 瀏覽:322
對稱密鑰加密演算法的特點是 瀏覽:610
龍洋:一個流傳千年的中國姓氏 瀏覽:942
原神文件中原石在哪一個文件夾 瀏覽:926
126郵箱登錄入口:便捷高效的電子郵件管理工具 瀏覽:782
遨遊pdf 瀏覽:611
色wwwwww:色彩對人們的情緒有重要影響 瀏覽:766