一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java 選擇排序、插入排序、希爾算法實例詳解

Java 選擇排序、插入排序、希爾算法實例詳解

2020-09-25 10:52java之家 Java教程

這篇文章主要介紹了Java 選擇排序、插入排序、希爾算法實例詳解,需要的朋友可以參考下

       1、基本思想:

在要排序的一組數中,選出最小的一個數與第一個位置的數交換;然后在剩下的數當中再找最小的與第二個位置的數交換,如此循環到倒數第二個數和最后一個數比較為止。  

  2、實例

Java 選擇排序、插入排序、希爾算法實例詳解

  3、算法實現  

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
  * 選擇排序算法
  * 在未排序序列中找到最小元素,存放到排序序列的起始位置
  * 再從剩余未排序元素中繼續尋找最小元素,然后放到排序序列末尾。
  * 以此類推,直到所有元素均排序完畢。
  * @param numbers
  */
 public static void selectsort(int[] numbers)
 {
 int size = numbers.length; //數組長度
 int temp = 0 ; //中間變量
 
 for(int i = 0 ; i < size ; i++)
 {
   int k = i;  //待確定的位置
   //選擇出應該在第i個位置的數
   for(int j = size -1 ; j > i ; j--)
   {
   if(numbers[j] < numbers[k])
   {
     k = j;
   }
   }
   //交換兩個數
   temp = numbers[i];
   numbers[i] = numbers[k];
   numbers[k] = temp;
 }
 }

二、插入排序

  1、基本思想:每步將一個待排序的記錄,按其順序碼大小插入到前面已經排序的字序列的合適位置(從后向前找到合適位置后),直到全部插入排序完為止。

  2、實例

Java 選擇排序、插入排序、希爾算法實例詳解

  3、算法實現

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
  * 插入排序
  *
  * 從第一個元素開始,該元素可以認為已經被排序
  * 取出下一個元素,在已經排序的元素序列中從后向前掃描
  * 如果該元素(已排序)大于新元素,將該元素移到下一位置
  * 重復步驟3,直到找到已排序的元素小于或者等于新元素的位置
  * 將新元素插入到該位置中
  * 重復步驟2
  * @param numbers 待排序數組
  */
 public static void insertsort(int[] numbers)
 {
 int size = numbers.length;
 int temp = 0 ;
 int j = 0;
 
 for(int i = 0 ; i < size ; i++)
 {
   temp = numbers[i];
   //假如temp比前面的值小,則將前面的值后移
   for(j = i ; j > 0 && temp < numbers[j-1] ; j --)
   {
   numbers[j] = numbers[j-1];
   }
   numbers[j] = temp;
 }
 }

4、效率:

時間復雜度:o(n^2).

三、希爾算法

1、基本思想:

先將整個待排序的記錄序列分割成為若干子序列分別進行直接插入排序,待整個序列中的記錄“基本有序”時,再對全體記錄進行依次直接插入排序。

2、操作方法:

選擇一個增量序列t1,t2,…,tk,其中ti>tj,tk=1;

按增量序列個數k,對序列進行k 趟排序;

每趟排序,根據對應的增量ti,將待排序列分割成若干長度為m 的子序列,分別對各子表進行直接插入排序。僅增量因子為1 時,整個序列作為一個表來處理,表長度即為整個序列的長度。

希爾排序的示例:

Java 選擇排序、插入排序、希爾算法實例詳解

 3、算法實現:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**希爾排序的原理:根據需求,如果你想要結果從大到小排列,它會首先將數組進行分組,然后將較大值移到前面,較小值
 * 移到后面,最后將整個數組進行插入排序,這樣比起一開始就用插入排序減少了數據交換和移動的次數,可以說希爾排序是加強
 * 版的插入排序
 * 拿數組5, 2, 8, 9, 1, 3,4來說,數組長度為7,當increment為3時,數組分為兩個序列
 * 5,2,8和9,1,3,4,第一次排序,9和5比較,1和2比較,3和8比較,4和比其下標值小increment的數組值相比較
 * 此例子是按照從大到小排列,所以大的會排在前面,第一次排序后數組為9, 2, 8, 5, 1, 3,4
 * 第一次后increment的值變為3/2=1,此時對數組進行插入排序,
 *實現數組從大到小排
 */
  public static void shellsort(int[] data)
  {
    int j = 0;
    int temp = 0;
    //每次將步長縮短為原來的一半
    for (int increment = data.length / 2; increment > 0; increment /= 2)
    {
    for (int i = increment; i < data.length; i++)
    {
      temp = data[i];
      for (j = i; j >= increment; j -= increment)
      {
      if(temp > data[j - increment])//如想從小到大排只需修改這里
      
        data[j] = data[j - increment];
      }
      else
      {
        break;
      }
      }
      data[j] = temp;
    }
    }
  }

 4、效率

 時間復雜度:o(n^2). 

4、各種算法的時間復雜度

Java 選擇排序、插入排序、希爾算法實例詳解

以上所述是小編給大家介紹的java 選擇排序、插入排序、希爾算法實例詳解,希望對大家有所幫助

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲精品国产成人 | 洗濯屋H纯肉动漫在线观看 武侠艳妇屈辱的张开双腿 午夜在线观看免费观看 视频 | 欧美男男gaysgays | 色多多绿巨人视频 | 四虎永久免费地址ww417 | 免费超级乱淫播放手机版 | 日韩在线天堂 | 韩国三级年轻小的胰子完整 | 草草视频免费在线观看 | 亚洲色图欧美视频 | 亚洲 日韩 在线 国产 视频 | 欧美艳星julnaann | 好姑娘在线完整版视频 | 妹妹你插的我好爽 | 深夜视频在线播放 | 精品国产麻豆AV无码 | 日韩无砖专区体验区 | 亚洲AV无码偷拍在线观看 | 美女毛片视频 | 三级伦理在线播放 | tobu8在线观看免费高清 | yy3341殇情影院理论片 | 高清麻生希在线 | 大学生特黄特色大片免费播放 | 国外欧美一区另类中文字幕 | 激情图片 激情小说 | 国产精品久久久久久久久久久久久久 | 国产欧美日韩综合 | 午夜福利体检 | 欧美在线播放成人免费 | 成人免费一区二区三区在线观看 | 美女的隐私脱裤子无遮挡 | 女教师巨大乳孔中文字幕免费 | 久久久久九九 | 国产成人啪精品午夜在线播放 | 亚洲AV久久久久久久无码 | 果冻传媒在线观看的 | 俄罗斯毛片免费大全 | 男人与禽交的方法 | 69av导航 | 99视频一区|