日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于选择排序和快速排序--2017-09-24

發布時間:2025/3/8 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于选择排序和快速排序--2017-09-24 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.前言

因為開始習慣使用印象筆記,所以好久沒更新博客了,以后會計劃每月固定整理四篇博客,一方面鍛煉下寫作能力,同時希望能夠幫到別人。 #####大概從基礎開始把-算法數據結構到源碼解析-暫時就這樣定了。

2.關于算法的重要性

首先,其實現在大多數算法的實現都被封裝的差不多,除了一些大公司面試會問到,工作用暫時需要的還不多,對于一個有志向向上發展的算法和數據結構這種基礎是很重要了,不廢話了,進入正題。

3.選擇排序和插入排序

這兩種算法都是O(n^2)級別的算法,學習他們方便我們理解后續的歸并和快排等,而且算法的時間復雜度并不絕對,特定的情況能夠選擇合適的算法才說明真正的學會了算法。
  • 選擇排序
    選擇排序可以說是一個完全入門級別的算法,首先看原理圖

    如圖所示,選擇排序首先會找到當前數組中最小的元素,將其放在數組的第一個位置,再找到第二小的元素將其放在第二個元素位置,一次類推
    我們使用兩層循環就刻以做到

  • public static int[] sort (int[] args) {for (int i = 0; i < args.length; i++) {//找到[1...n)的最小值int minIndex = i;for (int j = i + 1; j < args.length; j++) if (args[j] < args[minIndex]) minIndex = j;//這個函數只是簡單交換了兩個索引元素的位置PowerUtils.swap(args, minIndex, i);}return args; }

    2.插入排序
    插入排序和選擇排序一樣都是O(n^2)級別的算法,但是不一樣的事,插入排序在相同元素比較多的情況,或者本身數列就接近有序情況下,插入排序進化到一個O(n)級別的算法
    簡單實現圖

    代碼實現:

    public static int[] sort (int[] args) {for (int i = 1; i < args.length; i++) {//找到[1...n)的最小值int minIndex = i;for (int j = i-1; j > 0 && args[j] > args[i]; j--) //這個函數只是簡單交換了兩個索引元素的位置PowerUtils.swap(args, j, i);}return args; }

    現在這種插入排序算法的效果要比選擇排序差很多,因為在循環中有很多的頻繁交換值的操作,所以有個插入排序的2.0版本
    實現圖:

    代碼:

    public static int[] sort (int[] args) {for (int i = 1; i < args.length; i++) {//記錄當前位置的元素int ret = args[i], j;//如果當前元素比前一個小-則向前挪一位for (j = i; j > 0 && args[j - 1] > ret; j--) args[j] = args[j - 1];//將args[j] = ret;}return args; }

    結束:

    到這選擇和插入排序就完成了,希望能給大家帶來幫助

    轉載于:https://www.cnblogs.com/uzies/p/9649498.html

    與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的关于选择排序和快速排序--2017-09-24的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。