選擇排序演算法的java實現(十種排序演算法java)

本文目錄一覽:

java選擇排序法

//選擇排序

//原理:每次都找到當次最大的數,按大小順序依次放入數組相應位置

//比如:第一次先找到最大的數並記下其位置,如果其不在數組第一位,

//則將其與第一位交換,使最大數置於第一位

//第二次再循環查找第二大的數並記下其位置,如果其不在數組第二位,

//則將其與第二位交換,使最大數置於第二位

//依次類推…………………………………..

//第i次再循環查找第i大的數並記下其位置,如果其不在數組第 i位,

//則將其與第 i位交換,使最大數置於第 i位

public class SelectSort {

public static void main(String[] args) {

int[] a = {25,15,42,16,12,36};

int max = 0;

int tmp = 0;

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

max = i;//

/**查找第 i大的數,直到記下第 i大數的位置***/

for(int j=i+1;ja.length;j++){

if(a[max]a[j])

max = j;//記下較大數位置,再次比較,直到最大

}

/***如果第 i大數的位置不在 i,則交換****/

if(i!=max){

tmp = a[i];

a[i] = a[max];

a[max] = tmp;

}

}

for(int i=0;ia.length;i++)

System.out.print(a[i]+” “);

}

}

不好意思哦,上次發錯了,幸好樓主及時提醒,

現在再發過一次,希望您滿意。

初學者:用java程序寫一個選擇排序演算法!

選擇排序法:

public class TSort{

public static void main(String args[]){

int a[]={12,45,2,5,26,56};

for(int i=0;ia.length-1;i++){

int t;

for(int j=i+1;ja.length;j++){

if(a[i]a[j]){

t=a[i];a[i]=a[j];a[j]=t;

}

}

}

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

System.out.print(a[i]+” “);

}

}

}

請給出java幾種排序方法

java常見的排序分為:

1 插入類排序

主要就是對於一個已經有序的序列中,插入一個新的記錄。它包括:直接插入排序,折半插入排序和希爾排序

2 交換類排序

這類排序的核心就是每次比較都要「交換」,在每一趟排序都會兩兩發生一系列的「交換」排序,但是每一趟排序都會讓一個記錄排序到它的最終位置上。它包括:起泡排序,快速排序

3 選擇類排序

每一趟排序都從一系列數據中選擇一個最大或最小的記錄,將它放置到第一個或最後一個為位置交換,只有在選擇後才交換,比起交換類排序,減少了交換記錄的時間。屬於它的排序:簡單選擇排序,堆排序

4 歸併類排序

將兩個或兩個以上的有序序列合併成一個新的序列

5 基數排序

主要基於多個關鍵字排序的。

下面針對上面所述的演算法,講解一些常用的java代碼寫的演算法

二 插入類排序之直接插入排序

直接插入排序,一般對於已經有序的隊列排序效果好。

基本思想:每趟將一個待排序的關鍵字按照大小插入到已經排序好的位置上。

演算法思路,從後往前先找到要插入的位置,如果小於則就交換,將元素向後移動,將要插入數據插入該位置即可。時間複雜度為O(n2),空間複雜度為O(1)

package sort.algorithm;

public class DirectInsertSort {

public static void main(String[] args) {

// TODO Auto-generated method stub

int data[] = { 2, 6, 10, 3, 9, 80, 1, 16, 27, 20 };

int temp, j;

for (int i = 1; i data.length; i++) {

temp = data[i];

j = i – 1;

// 每次比較都是對於已經有序的

while (j = 0 data[j] temp) {

data[j + 1] = data[j];

j–;

}

data[j + 1] = temp;

}

// 輸出排序好的數據

for (int k = 0; k data.length; k++) {

System.out.print(data[k] + ” “);

}

}

}

三 插入類排序之折半插入排序(二分法排序)

條件:在一個已經有序的隊列中,插入一個新的元素

折半插入排序記錄的比較次數與初始序列無關

思想:折半插入就是首先將隊列中取最小位置low和最大位置high,然後算出中間位置mid

將中間位置mid與待插入的數據data進行比較,

如果mid大於data,則就表示插入的數據在mid的左邊,high=mid-1;

如果mid小於data,則就表示插入的數據在mid的右邊,low=mid+1

最後整體進行右移操作。

時間複雜度O(n2),空間複雜度O(1)

package sort.algorithm;

//折半插入排序

public class HalfInsertSort {

public static void main(String[] args) {

int data[] = { 2, 6, 10, 3, 9, 80, 1, 16, 27, 20 };

// 存放臨時要插入的元素數據

int temp;

int low, mid, high;

for (int i = 1; i data.length; i++) {

temp = data[i];

// 在待插入排序的序號之前進行折半插入

low = 0;

high = i – 1;

while (low = high) {

mid = (low + high) / 2;

if (temp data[mid])

high = mid – 1;

else

// low=high的時候也就是找到了要插入的位置,

// 此時進入循環中,將low加1,則就是要插入的位置了

low = mid + 1;

}

// 找到了要插入的位置,從該位置一直到插入數據的位置之間數據向後移動

for (int j = i; j = low + 1; j–)

data[j] = data[j – 1];

// low已經代表了要插入的位置了

data[low] = temp;

}

for (int k = 0; k data.length; k++) {

System.out.print(data[k] + ” “);

}

}

}

四 插入類排序之希爾排序

希爾排序,也叫縮小增量排序,目的就是儘可能的減少交換次數,每一個組內最後都是有序的。

將待續按照某一種規則分為幾個子序列,不斷縮小規則,最後用一個直接插入排序合成

空間複雜度為O(1),時間複雜度為O(nlog2n)

演算法先將要排序的一組數按某個增量d(n/2,n為要排序數的個數)分成若干組,每組中記錄的下標相差d.對每組中全部元素進行直接插入排序,然後再用一個較小的增量(d/2)對它進行分組,在每組中再進行直接插入排序。當增量減到1時,進行直接插入排序後,排序完成。

package sort.algorithm;

public class ShellSort {

public static void main(String[] args) {

int a[] = { 1, 54, 6, 3, 78, 34, 12, 45, 56, 100 };

double d1 = a.length;

int temp = 0;

while (true)

{

//利用這個在將組內倍數減小

//這裡依次為5,3,2,1

d1 = Math.ceil(d1 / 2);

//d為增量每個分組之間索引的增量

int d = (int) d1;

//每個分組內部排序

for (int x = 0; x d; x++)

{

//組內利用直接插入排序

for (int i = x + d; i a.length; i += d) {

int j = i – d;

temp = a[i];

for (; j = 0 temp a[j]; j -= d) {

a[j + d] = a[j];

}

a[j + d] = temp;

}

}

if (d == 1)

break;

}

for (int i = 0; i a.length; i++)

System.out.print(a[i]+” “);

}

}

五 交換類排序之冒泡排序

交換類排序核心就是每次比較都要進行交換

冒泡排序:是一種交換排序

每一趟比較相鄰的元素,較若大小不同則就會發生交換,每一趟排序都能將一個元素放到它最終的位置!每一趟就進行比較。

時間複雜度O(n2),空間複雜度O(1)

package sort.algorithm;

//冒泡排序:是一種交換排序

public class BubbleSort {

// 按照遞增順序排序

public static void main(String[] args) {

// TODO Auto-generated method stub

int data[] = { 2, 6, 10, 3, 9, 80, 1, 16, 27, 20, 13, 100, 37, 16 };

int temp = 0;

// 排序的比較趟數,每一趟都會將剩餘最大數放在最後面

for (int i = 0; i data.length – 1; i++) {

// 每一趟從開始進行比較,將該元素與其餘的元素進行比較

for (int j = 0; j data.length – 1; j++) {

if (data[j] data[j + 1]) {

temp = data[j];

data[j] = data[j + 1];

data[j + 1] = temp;

}

}

}

for (int i = 0; i data.length; i++)

System.out.print(data[i] + ” “);

}

}

java選擇排序

你是想要幫你完善一下,然後可以運行是吧??

代碼如下:

public class Test {

public void sortFistname(String[] args) {

String temp;

System.out.println(“按首字母排序”);

for (int i = 0; i  args.length – 1; i++) {

int maxIndex = i;

String max = args[i];

for (int j = i + 1; j  args.length; j++) {

int a = max.compareTo(args[j]);

if (a  0) {

maxIndex = j;

}

}

if (maxIndex != i) {

temp = args[i];

args[i] = args[maxIndex];

args[maxIndex] = temp;

}

}

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

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

}

}

public Test() {

String[] args = {“abc”,”afew”,”ebwe”,”gverg”,”nrgerg”};

sortFistname(args);

}

public static void main(String[] args) {

new Test();

}

}

Java數組排序 幾種排序方法詳細一點

JAVA中在運用數組進行排序功能時,一般有四種方法:快速排序法、冒泡法、選擇排序法、插入排序法。

快速排序法主要是運用了Arrays中的一個方法Arrays.sort()實現。

冒泡法是運用遍曆數組進行比較,通過不斷的比較將最小值或者最大值一個一個的遍歷出來。

選擇排序法是將數組的第一個數據作為最大或者最小的值,然後通過比較循環,輸出有序的數組。

插入排序是選擇一個數組中的數據,通過不斷的插入比較最後進行排序。下面我就將他們的實現方法一一詳解供大家參考。

1利用Arrays帶有的排序方法快速排序

public class Test2{   

        public static void main(String[] args){   

                int[] a={5,4,2,4,9,1};   

                Arrays.sort(a);  //進行排序   

                for(int i: a){   

                        System.out.print(i);   

               }  

        }  

}

2冒泡排序演算法

public static int[] bubbleSort(int[] args){//冒泡排序演算法   

        for(int i=0;iargs.length-1;i++){   

               for(int j=i+1;jargs.length;j++){   

                   if (args[i]args[j]){   

                       int temp=args[i];   

                       args[i]=args[j];   

                       args[j]=temp;   

                       }   

            }  

       }  

       return args;  

}

3選擇排序演算法

public static int[] selectSort(int[] args){//選擇排序演算法   

         for (int i=0;iargs.length-1 ;i++ ){   

                int min=i;   

                for (int j=i+1;jargs.length ;j++ ){   

                      if (args[min]args[j]){   

                           min=j;   

                           }   

                  }   

                      if (min!=i){  

                      int temp=args[i];  

                      args[i]=args[min];  

                      args[min]=temp;          

                  }  

            }  

             return args;  

    }

4插入排序演算法

public static int[] insertSort(int[] args){//插入排序演算法   

                 for(int i=1;iargs.length;i++){   

                         for(int j=i;j0;j–){   

                                 if (args[j]args[j-1]){   

                                         int temp=args[j-1];  

                                         args[j-1]=args[j];  

                                        args[j]=temp;          

                                }else break;   

                        }  

                 }  

                 return args;  

         }

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/245058.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:06
下一篇 2024-12-12 13:06

相關推薦

  • Java JsonPath 效率優化指南

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

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

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

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

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

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

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

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

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

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

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

    編程 2025-04-29
  • Python實現爬樓梯演算法

    本文介紹使用Python實現爬樓梯演算法,該演算法用於計算一個人爬n級樓梯有多少種不同的方法。 有一樓梯,小明可以一次走一步、兩步或三步。請問小明爬上第 n 級樓梯有多少種不同的爬樓梯…

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

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

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

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

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29

發表回復

登錄後才能評論