java算法之直接插入排序(java調用排序方法)

  • 1、關於java直接插入算法的問題
  • 2、java中排序方法有哪些
  • 3、Java 直接插入排序法
  • 4、java插入排序算法
  • 5、基礎的~java直接插入排序 求大蝦指點~~~= =

/**這是一個利用直接插入排序法寫的一個小程序;

直接插入排序是一個將待排序列中的元素p[i]與一個有序序列中的元素q[j–]比較(從後向前),當p[i] = q[j] (遞增排序)或 p[i] = q[j] (遞減排序)時,q[j+1] = p[i];反之就將q[j]移位到q[j+1]為p[i]的插入預留空間且如果j==0則q[j] = p[i].

*/

public class SISort

{

public static int[] sortAscending(int []with){ //整數遞增排序

int length = with.length; //獲取待排數組的元素個數;

int []temp = new int[length];

temp[0] = with[0]; //定義一個只有一個元素的有序數組

for(int i=1; ilength; i++){

for(int j=i-1; j=0;j–){

if(with[i] = temp[j]){ //如果待排序列中的元素大於等於有有序序列中的元素,則插入

temp[j+1] = with[i];

break;

}

else {

temp[j+1] = temp[j]; //給待插入元素預留空間

if(j == 0)

temp[j] = with[i]; //with[[i]是有序序列中最小的,因此排在開頭

}

}

}

return temp;

}

public static double[] sortAscending(double []with){ //帶小數的遞增排序

int length = with.length; //獲取待排數組的元素個數;

double []temp = new double[length];

temp[0] = with[0]; //定義一個只有一個元素的有序數組

for(int i=1; ilength; i++){

for(int j=i-1; j=0;j–){

if(with[i] = temp[j]){ //如果待排序列中的元素大於等於有有序序列中的元素,則插入

temp[j+1] = with[i];

break;

}

else {

temp[j+1] = temp[j]; //給待插入元素預留空間

if(j == 0)

temp[j] = with[i]; //with[[i]是有序序列中最小的,因此排在開頭

}

}

}

return temp;

}

public static double[] sortDescending(double []with){ //遞減排序

int length = with.length; //獲取待排數組的元素個數;

double []temp = new double[length];

temp[0] = with[0]; //定義一個只有一個元素的有序數組

for(int i=1; ilength; i++){

for(int j=i-1; j=0;j–){

if(with[i] = temp[j]){ //如果待排序列中的元素小於等於有有序序列中的元素,則插入

temp[j+1] = with[i];

break;

}

else {

temp[j+1] = temp[j]; //給待插入元素預留空間

if(j == 0)

temp[j] = with[i]; //with[[i]是有序序列中最大的,因此排在開頭

}

}

}

return temp;

}

public static int[] sortDescending(int []with){ //遞減排序

int length = with.length; //獲取待排數組的元素個數;

int []temp = new int[length];

temp[0] = with[0]; //定義一個只有一個元素的有序數組

for(int i=1; ilength; i++){

for(int j=i-1; j=0;j–){

if(with[i] = temp[j]){ //如果待排序列中的元素小於等於有有序序列中的元素,則插入

temp[j+1] = with[i];

break;

}

else {

temp[j+1] = temp[j]; //給待插入元素預留空間

if(j == 0)

temp[j] = with[i]; //with[[i]是有序序列中最大的,因此排在開頭

}

}

}

return temp;

}

/* public static void main(String[] args)

{

int []test1 = {2,6,5,8,7,9,10,256,248,14}; //測試數組

double []test2 = {1.1,2.0,3,5,6,8.9,99,5};

int []temp1; //中間變量

double []temp2;

temp1 = sortDescending(test1); //測試整數遞減排序

System.out.println(“get a Decreasing sequence “);

for(int i=0; itemp1.length; i++){

System.out.println(temp1[i]);

}

temp1 = sortAscending(test1); //測試整數遞增排序

System.out.println(“get a Increasing sequence”);

for(int i=0; itemp1.length; i++){

System.out.println(temp1[i]);

}

temp2 = sortDescending(test2); //測試帶小數遞減排序

System.out.println(“get a Decreasing sequence “);

for(int i=0; itemp2.length; i++){

System.out.println(temp2[i]);

}

temp2 = sortAscending(test2); //測試帶小數遞增排序

System.out.println(“get a Increasing sequence”);

for(int i=0; itemp2.length; i++){

System.out.println(temp2[i]);

1、直接插入排序:最基本的插入排序,將第i個插入到前i-1個中的適當位置。

2、折半插入排序:因為是已經確定了前部分是有序序列,所以在查找插入位置的時候可以用折半查找的方法進行查找,提高效率。

3、 希爾排序: 又稱縮小增量排序法。把待排序序列分成若干較小的子序列,然後逐個使用直接插入排序法排序,最後再對一個較為有序的序列進行一次排序,主要是為了減少移動的次數,提高效率。原理應該就是從無序到漸漸有序,要比直接從無序到有序移動的次數會少一些。

4、 冒泡排序:反覆掃描待排序序列,在掃描的過程中順次比較相鄰的兩個元素的大小,若逆序就交換位置。第一趟,從第一個數據開始,比較相鄰的兩個數據,(以升序為例)如果大就交換,得到一個最大數據在末尾;然後進行第二趟,只掃描前n-1個元素,得到次大的放在倒數第二位。以此類推,最後得到升序序列。如果在掃描過程中,發現沒有交換,說明已經排好序列,直接終止掃描。所以最多進行n-1趟掃描。

5、快速排序: 思想:冒泡排序一次只能消除一個逆序,為了能一次消除多個逆序,採用快速排序。以一個關鍵字為軸,從左從右依次與其進行對比,然後交換,第一趟結束後,可以把序列分為兩個子序列,然後再分段進行快速排序,達到高效。

此外還有選擇、歸併、分配排序等等及它們的子類排序

比如數組[3,2,1,5]

這段處理就返回[1,2,3,5]

它的處理是從第二位開始依次跟前邊的比,比前邊的小就往前移動。

也就是[3,2,1,5]

[2,3,1,5]

[1,2,3,5]

(int j = i – 1; j = 0 temp array[j]; j–)

i是這次處理的下標,第一次是1,第二次是2,第三次是3,對應上邊原數組裡的2,1,5

處理開始時把下標i對應的值存在temp里,j表示的是i前邊的下標,temp array[j]的時候說明i下標的值比前邊的小,所以把小的值拿到前邊去。

這麼看是很抽象的,自己在本上寫的數組,畫一下處理過程會更有助於你理解。

import java.util.Arrays;

public class Insert {

public static void main(String[] args) {

int[] ary={8,3,7,1,9,4};

selectionSort(ary);

System.out.println(Arrays.toString(ary));

}

public static void selectionSort(int[] ary) {

int i,j,t;

for(i=1;iary.length;i++){

t=ary[i];

for(j=i-1;j=0tary[j];j–){

ary[j+1]=ary[j];

}ary[j+1]=t;

}

}

}

插入算法的原理是當要被插入的數比數組中元素小就放在他的前面,加了一個中間變量t,把數組元素先放那存着。如果成功插入就把插入數據放到對應的數組位置。然後下一個繼續先放在t裏面存着。直到最後一個數

說幾個我認為錯誤的地方吧:

1、你不是double數組嗎? 怎麼用 int 來取值呢? ” int m=n[i];//代碼1″

2、代碼3,4怎麼都是給n[j] 賦值呢? 賦值兩次?

3、”n[j]=n[0];//代碼4″ 這個是什麼意思?

原創文章,作者:HYZPF,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/126940.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
HYZPF的頭像HYZPF
上一篇 2024-10-03 23:13
下一篇 2024-10-03 23:13

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

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

    編程 2025-04-29
  • Java JsonPath 效率優化指南

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

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 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
  • ArcGIS更改標註位置為中心的方法

    本篇文章將從多個方面詳細闡述如何在ArcGIS中更改標註位置為中心。讓我們一步步來看。 一、禁止標註智能調整 在ArcMap中設置標註智能調整可以自動將標註位置調整到最佳顯示位置。…

    編程 2025-04-29
  • 解決.net 6.0運行閃退的方法

    如果你正在使用.net 6.0開發應用程序,可能會遇到程序閃退的情況。這篇文章將從多個方面為你解決這個問題。 一、代碼問題 代碼問題是導致.net 6.0程序閃退的主要原因之一。首…

    編程 2025-04-29
  • Python創建分配內存的方法

    在python中,我們常常需要創建並分配內存來存儲數據。不同的類型和數據結構可能需要不同的方法來分配內存。本文將從多個方面介紹Python創建分配內存的方法,包括列表、元組、字典、…

    編程 2025-04-29
  • Python中init方法的作用及使用方法

    Python中的init方法是一個類的構造函數,在創建對象時被調用。在本篇文章中,我們將從多個方面詳細討論init方法的作用,使用方法以及注意點。 一、定義init方法 在Pyth…

    編程 2025-04-29

發表回復

登錄後才能評論