插入排序java的簡單介紹

本文目錄一覽:

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
UMPF的頭像UMPF
上一篇 2024-10-29 19:00
下一篇 2024-10-29 19:00

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29

發表回復

登錄後才能評論