倒N字形排列java_Java排序8大算法實現

概述

排序有內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。

我們這里說說八大排序就是內部排序。

1342514529_5795.jpg

當n較大,則應采用時間復雜度為O(nlog2n)的排序方法:快速排序、堆排序或歸并排序序。

快速排序:是目前基于比較的內部排序中被認為是最好的方法,當待排序的關鍵字是隨機分布時,快速排序的平均時間最短;

1.插入排序—直接插入排序(Straight Insertion Sort)

基本思想:

將一個記錄插入到已排序好的有序表中,從而得到一個新,記錄數增1的有序表。即:先將序列的第1個記錄看成是一個有序的子序列,然后從第2個記錄逐個進行插入,直至整個序列有序為止。

要點:設立哨兵,作為臨時存儲和判斷數組邊界之用。

直接插入排序示例:

1342520948_8667.jpg

如果碰見一個和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后順序沒有改變,從原無序序列出去的順序就是排好序后的順序,所以插入排序是穩定的。

算法的實現:

void?print(int?a[],?int?n?,int?i){

cout<

for(int?j=?0;?j<8;?j++){

cout<

}

cout<

}

void?InsertSort(int?a[],?int?n)

{

for(int?i=?1;?i

if(a[i]?

int?j=?i-1;

int?x?=?a[i];????????//復制為哨兵,即存儲待排序元素

a[i]?=?a[i-1];???????????//先后移一個元素

while(x?

a[j+1]?=?a[j];

j--;?????????//元素后移

}

a[j+1]?=?x;??????//插入到正確位置

}

print(a,n,i);???????????//打印每趟排序的結果

}

}

int?main(){

int?a[8]?=?{3,1,5,7,2,4,9,6};

InsertSort(a,8);

print(a,8,8);

}

效率:

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

其他的插入排序有二分插入排序,2-路插入排序。

2. 插入排序—希爾排序(Shell`s Sort)

希爾排序是1959 年由D.L.Shell 提出來的,相對直接排序有較大的改進。希爾排序又叫縮小增量排序

基本思想:

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

操作方法:

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

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

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

希爾排序的示例:

1342577299_5077.jpg

算法實現:

我們簡單處理增量序列:增量序列d = {n/2 ,n/4, n/8 .....1}n為要排序數的個數

即:先將要排序的一組記錄按某個增量d(n/2,n為要排序數的個數)分成若干組子序列,每組中記錄的下標相差d.對每組中全部元素進行直接插入排序,然后再用一個較小的增量(d/2)對它進行分組,在每組中再進行直接插入排序。繼續不斷縮小增量直至為1,最后使用直接插入排序完成排序。

void?print(int?a[],?int?n?,int?i){

cout<

for(int?j=?0;?j<8;?j++){

cout<

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529189.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529189.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529189.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

cross_val_score 如何對孤立森林_【收藏】森林防火手抄報素材匯總!

森林防火手抄報模板參考【文字素材參考】01森林防火根據森林火災燃燒中央地點&#xff0c;蔓延速度&#xff0c;受害部位和程度&#xff0c;大致可把森林火災分為三大類:一.地表火 二.樹冠火 三.地下火。以受害森林面積大小為標準&#xff0c;森林火災分為以下四類:1.森林火警:…

java io 轉換流_Java編程IO流中的轉換流

對于IO流中的轉換流&#xff0c;顧名思義&#xff0c;就是將字符流轉換成字節流或者是將字節流轉換成字符流的對象。那么有時候我們得到的是一個字符流&#xff0c;但是我們又需要進行一些計算之類的&#xff0c;或者我們得到的是一個字節流&#xff0c;但是我們又需要進行一些…

pb9 調用系統語音_成都電銷系統一個月多少錢_選擇靈狐傳媒_收費透明

靈狐傳媒表示&#xff1a;成都電銷系統一個月多少錢_選擇靈狐傳媒_收費透明,在成都想要找一家專業的電銷系統&#xff0c;今天小編帶您看看該怎么選擇吧&#xff0c;和研發實踐&#xff0c;融合互聯網、云計算及人工智能、通信、大數據等技術&#xff0c;研發推出了以人工智能為…

java thread 線程銷毀_手把手帶你了解Java線程的實現方式及生命周期原理

前言我們在工作中線程技術很多情況下都能用的到&#xff0c;而且我們在面試的時候&#xff0c;線程技術基本上也是必問的。今天我來從線程的實現方式以及線程的生命周期做一個全面的講解與分析&#xff0c;幫助大家能更好的去了解線程技術。概念我們先來了解下線程和進程的概念…

python自動化_python自動化測試-Behave框架的用法介紹 - python測試學習

測碼學院 Behave框架的用法介紹眾所周知&#xff1a;行為驅動開發((behavior-drivendevelopment&#xff0c;BDD)是一種基于敏捷軟件開發的方法。它可以鼓勵開發人員&#xff0c;業務參與者和QA人員之間的協作。作為另一個Python自動化測試框架&#xff0c;“Behave”允許團隊…

虛擬按鍵自己觸發的java代碼_在SystemUI添加虛擬按鍵

我們想要在volume、back、menu同一排添加一個虛擬按鍵&#xff0c;并且觸發一個應用&#xff1b;1、首先我們要找到這些虛擬按鍵的位置&#xff1a;\frameworks\base\packages\SystemUI\res\layout-sw600dp\navigation_bar.xml2、橫屏時&#xff0c;最左邊的RelativeLayout 中添…

diskgeniusv4.4.0_入門TensorFlow2.0

今天老師帶領我們入門TensorFlow2.0。至于tensorflow2.0是啥嘛&#xff0c;詳細的可以度娘一下。我簡述一下,就是一個end-to-end machine-Learning open source plantform(端對端的開源機器學習的平臺)。學習tensorflow需要引入tensor這個概念&#xff0c;tensor的漢語意思就是…

java.close用法_void close()

void close()描述 (Description)java.io.FilterInputStream.close()方法關閉此輸入流并釋放與該流關聯的所有系統資源。聲明 (Declaration)以下是public void close()方法的聲明 -public void close()參數 (Parameters)NA返回值 (Return Value)該方法不返回任何值。異常 (Excep…

php 其他頁面獲取session_PHP五十個提升執行效率的小技巧,和常見問題

在項目開發過程中&#xff0c;經常遇到了一些PHP處理程序性能底下的情況&#xff0c;程序運行在centosnginx環境&#xff0c;雖然這個有很多的原因如&#xff1a;服務器本身配置&#xff0c;運行環境nginx服務&#xff0c;php-fpm配置等等&#xff0c;更多有一點仍然是PHPer沒有…

java怎么設置404界面_如何使用Spring MVC顯示自定義的404 Not Found頁面

本篇文章給大家帶來的內容是關于如何使用Spring MVC顯示自定義的404 Not Found頁面&#xff0c;有一定的參考價值&#xff0c;有需要的朋友可以參考一下&#xff0c;希望對你有所幫助。不知道大家對千篇一律的404 Not Found的錯誤頁面是否感到膩歪了&#xff1f;其實通過很簡單…

藍牙解碼格式哪個最好_拆解報告:山靈UP2 藍牙音頻接收器

主流手機逐步取消3.5mm接口&#xff0c;不再內置解碼芯片&#xff0c;習慣使用有線耳機、對音質有一定要求的朋友只能選擇音頻轉換線或者藍牙耳機功率放大器這類產品替代。與轉換線相比&#xff0c;藍牙耳機功率放大器采用藍牙無線連接更加自由&#xff0c;體積一般也比較小巧。…

java spring mvc json ajax 優勢_SpringMVC后臺json數據前臺ajax獲取不到!!!急求解答!!!...

//后端RestControllerRequestMapping(value "/loan")public class LoanApplyController extends BaseController {Resourceprivate LoanApplyService loanApplyService;//購車申請審核模塊RequestMapping(value "apply/all", method RequestMethod.GET)…

項目助理這個工作怎么樣_分析微信清理僵尸粉這個項目怎么樣?

做微信清理僵尸粉做微信清理僵尸粉做微信清理僵尸粉本人利用這個方式一年副業賺了10萬01 項目介紹(為什么這個項目受歡迎)現在每個人幾乎都會用到微信&#xff0c;但是時間長了&#xff0c;微信好友都是幾百上千好友(5000是上限)了。但是你有沒有發現&#xff0c;每次跟你微信溝…

php后臺閃退,詳解Cscms V4程序網站后臺登陸出現閃退

最近無憂主機php空間有些站長在使用Cscms V4程序建站&#xff0c;登陸網站后臺的時候出現了閃退的問題&#xff0c;這個問題困惑了很多使用這程序的站長們&#xff0c;因為出現這樣的問題不只是單純的Cscms程序才會出現&#xff0c;比如說Dedemcs、Wordpress等等蠻多的程序同樣…

java 線程安全list_JAVA并發編程實戰-線程安全性

線程安全性&#xff1a;對象的狀態是指存儲在狀態變量&#xff08;例如實例和靜態域&#xff09;中的數據。對象的狀態可能包括其他依賴對象的域。例如&#xff1a;某個HashMap的狀態不僅存儲在HashMap對象本身&#xff0c;還存儲在許多Map.Entry對象中。“共享”意味變量可以由…

日文轉換為羅馬音_手把手教你掌握韓語40音!入門必備哦

其實學習韓語還是蠻簡單的&#xff0c;平時看韓劇也能學會幾句比較常用的話&#xff5e;那么接下來我們進入正題&#xff0c;首先你可以根據自己的韓語學習經驗和全網搜集&#xff0c;整理出以下能夠快速學習韓語40音的方法&#xff0c;希望能幫助到更多面對韓語40音迷茫無措的…

php asp 發起post請求,PHP用curl函數POST請求到ASP頁面提示無效請求

如題&#xff0c;一提交即返回以下信息&#xff1a;錯誤您所請求的網址(URL)無法獲取——————————————————————————–當嘗試進行以下請求時&#xff1a;POST /card/pay_card.aspx HTTP/1.0Host: pay.m3guo.comX-Real-IP: 120.31.66.99X-Forwarded-For:…

win7一直顯示正在啟動_win7系統中提高啟動速度并且禁用某些軟件啟動的操作小技巧...

我們在啟動系統時&#xff0c;會出現啟動速度過慢&#xff0c;甚至達到假死機狀態&#xff0c;就是鼠標一直在轉圈圈的等待狀態。出現這個問題&#xff0c;一般是我們電腦中自啟動的軟件過多造成的&#xff0c;解決這個問題我們只要進入系統配置工具中&#xff0c;對系統進行相…

站怎么點都是一樣_抖音怎么做?這幾樣一樣都不能少,你都做到了嗎?

有人說去年是內容爆發年&#xff0c;也有人說今年是內容元年&#xff0c;其實不管哪年都好&#xff0c;反正電商平臺是越來越傾向于內容化運營&#xff0c;包括618都對入場商家的內容化運營有要求&#xff0c;特別是短視頻內容。下面就給大家分享一下如何去做好一個抖音賬號。分…

棧 php 驗證格式,表單驗證 - 《Biny - 高性能輕量級PHP框架》 - 書棧網 · BookStack...

表單驗證框架提供了一套完整的表單驗證解決方案&#xff0c;適用于絕大多數場景。表單驗證支持所有類型的驗證以及自定義方法簡單示例&#xff1a;namespaceapp\form;usebiny\lib\Form;/*** property \app\service\testService $testService* 自定義一個表單驗證類型類 繼承For…