本文目錄一覽:
Java編程:簡化的插入排序?
代碼:(如果輸入必須是有序數組,不然方法內要先排序)
結果:
java 數組插入排序改錯 急
修改Score類聲明,實現java.lang.Comparable介面;
public class Score implements java.lang.Comparable{
在方法getStuInfomation() 後追加兩個方法(compareTo為Comparable介面要求實現此方法,toString為重寫基類的列印輸出方法):
public int compareTo(Object otherScore) {
return this.stuScore – ((Score) otherScore).stuScore;
}
public String toString() {
return “[學號:” + stuNumber + “分數:” + stuScore + “姓名:” + stuName + “]”;
}
重新編譯Score.java,再運行Test,輸出結果為:
———-
[學號:3分數:323姓名:Lily]
[學號:5分數:332姓名:Mike]
[學號:2分數:445姓名:Fangfang]
[學號:1分數:472姓名:Liming]
[學號:4分數:540姓名:Green]
–2008/04/05
哎……
package method2;
import java.util.ArrayList;
import java.util.Collections;
public class Test {
public static void main(String args[]) {
ArrayList list = new ArrayList();
list.add(new Score(1, “Liming”, 472));
list.add(new Score(2, “Fangfang”, 445));
list.add(new Score(3, “Lily”, 323));
list.add(new Score(4, “Green”, 540));
list.add(new Score(5, “Mike”, 332));
Collections.sort(list, new StuScoreComparator());
for (int i = 0; i list.size(); i++) {
System.out.println(list.get(i).toString());
}
Collections.binarySearch(list, new Score(1, “Liming”, 472));
}
}
class StuScoreComparator extends Score implements java.util.Comparator {
public int compare(Object o1, Object o2) {
Score score1 = (Score) o1;
Score score2 = (Score) o2;
return score1.getStuScore() – score2.getStuScore();
}
}
package method2;
/**
*
* @author Liuzhichao
*/
public class Score implements java.lang.Comparable {
private int stuNumber;
private String stuName;
private int stuScore;
Score() {
}
public Score(int stuNumber, String stuName, int stuScore) {
if (stuNumber 0) {
this.stuNumber = stuNumber;
} else {
System.out.println(“輸入的學生學號不正確”);
System.exit(1);
}
if (stuScore 0) {
this.stuScore = stuScore;
} else {
System.out.println(“輸入的學生學號不正確”);
System.exit(1);
}
this.stuName = stuName;
}//設置學生信息
public void setStuNumber(int stuNumber) {
this.stuNumber = stuNumber;
}//設置學生學號
public void setStuScore(int stuScore) {
this.stuScore = stuScore;
}//設置學生分數
public void setStuName(String stuName) {
this.stuName = stuName;
}//設置學生名字
public int getStuNumber() {
return this.stuNumber;
}//設置學生學號
public int getStuScore() {
return this.stuScore;
}//設置學生分數
public String getStuName() {
return this.stuName;
}//獲取學生名字
public String getStuInfomation() {
return “名字:” + this.stuName + ” 學號:” + this.stuNumber + ” 成績:” + this.stuScore;
}//獲取學生信息
public int compareTo(Object otherScore) {
return this.stuScore – ((Score) otherScore).stuScore;
}
public String toString() {
return “[學號:” + stuNumber + “分數:” + stuScore + “姓名:” + stuName + “]”;
}
}
JAVA中有哪幾種常用的排序方法?
最主要的是冒泡排序、選擇排序、插入排序以及快速排序
1、冒泡排序
冒泡排序是一個比較簡單的排序方法。在待排序的數列基本有序的情況下排序速度較快。若要排序的數有n個,則需要n-1輪排序,第j輪排序中,從第一個數開始,相鄰兩數比較,若不符合所要求的順序,則交換兩者的位置;直到第n+1-j個數為止,第一個數與第二個數比較,第二個數與第三個數比較,……,第n-j個與第n+1-j個比較,共比較n-1次。此時第n+1-j個位置上的數已經按要求排好,所以不參加以後的比較和交換操作。
例如:第一輪排序:第一個數與第二個數進行比較,若不符合要求的順序,則交換兩者的位置,否則繼續進行二個數與第三個數比較……。直到完成第n-1個數與第n個數的比較。此時第n個位置上的數已經按要求排好,它不參與以後的比較和交換操作;第二輪排序:第一個數與第二個數進行比較,……直到完成第n-2個數與第n-1個數的比較;……第n-1輪排序:第一個數與第二個數進行比較,若符合所要求的順序,則結束冒泡法排序;若不符合要求的順序,則交換兩者的位置,然後結束冒泡法排序。
共n-1輪排序處理,第j輪進行n-j次比較和至多n-j次交換。
從以上排序過程可以看出,較大的數像氣泡一樣向上冒,而較小的數往下沉,故稱冒泡法。
public void bubbleSort(int a[])
{
int n = a.length;
for(int i=0;in-1;i++)
{
for(int j=0;jn-i-1;j++)
{
if(a[j] a[j+1])
{
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
2、選擇排序
選擇法的原理是先將第一個數與後面的每一個數依次比較,不斷將將小的賦給第一個數,從而找出最小的,然後第二個數與後面的每一個數依次比較,從而找出第二小的,然後第三個數與後面的每一個數依次比較,從而找出第三小的…..直到找到最後一個數。
public void sort(int x[])
{
int n=x.length;
int k,t;
for(int i=0;in-1;i++)
{
k=i;
for(int j=i+1;j=n;j++)
{
if(x[j]x[k])k=j;
if(k!=i)
{
t=x[i];
x[i]=x[k];
x[k]=t;
}
}
}
}
3、插入排序
插入排序的原理是對數組中的第i個元素,認為它前面的i-1個已經排序好,然後將它插入到前面的i-1個元素中。插入排序對少量元素的排序較為有效.
public void sort(int obj[])
{
for(int j=1;jobj.length;j++)
{
int key=obj[j];
int i=j-1;
while(i=0obj[i]key)
{
obj[i+1]=obj[i];
i–;
}
obj[i+1]=key;
}
}
4、快速排序
快速排序是對冒泡排序的一種改進。它的基本思想是:通過一次排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按次方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此大道整個數據變成有序序列。
public void quickSort(int obj[],int low,int high)
{
int i=low;
int j=high;
int keyValue=obj[i];
while(ij)
{
int temp=0;
while(ijobj[j]=keyValue)
{
j=j-1;
}
temp=obj[j];
obj[j]=obj[i];
obj[i]=temp;
while(ijobj[i]=keyValue)
{
i=i+1;
}
temp=obj[j];
obj[j]=ojb[i];
obj[i]=temp;
}
obj[i]=keyValue;
if(lowi-1)
{
quickSort(obj,low,i-1);
}
if(highi+1)
{
quickSort(obj,i+1,high);
}
}
原創文章,作者:UMPF,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/146320.html