冒泡、快速排序小結

1.冒泡排序

? ?(1) 比較領近的兩個數

 (2) 如果左邊的比右邊的數字大,則交換位置

 (3) 向右移動一位,繼續比較相鄰的兩個數

? 排序示例:

?一輪排序結束后,最大值的位置已經移動最右端,再次如此循環,最終經過n-1次則完成最終排序。

使用java算法表示外部循環,需要經過n-1次。

  for(int i=0;i<n-1;i++)

內部循環由于外部循環每完成一次就有一個數字完成最終排序,則需要經過n-1-i次比較

  for(int j=0;j<n-1-i;j++)

最終冒泡排序的java算法為:

  int[] a=new int[]{18,19,5,8,3};int n=a.length;for(int i=0;i<n-1;i++){for(int j=0;j<n-1-i;j++){if(a[j]>a[j+1]){int temp=a[j+1];a[j+1]=a[j];a[j]=temp;}}}for(int k=0;k<n;k++){System.out.println("**"+a[k]);}

?

2.快速排序

?思路:基于分治的思想,是冒泡排序的改進版。首先在數組中選擇一個基準點,然后從數組的兩端開始掃描,設置lo指標指向開始端,hi指向結尾端。

從后半部分開始掃描,如果掃描到有比基準點值小的,則把這個值賦值給基準點位置。然后從前部分掃描,掃描比基準點大的元素,掃描到后把該元素賦值與上一個移動的元素。

如此循環,直到lo,hi指針重合,則結束一輪循環。這次把基準點的值賦值給最后一個變動的元素,這時,基準點前面都是比它小的元素,后面都是比它大的,也就是是確定了基準點的最終位置。

排序過程如下:

原始數據 ? ? ?72 ? 6 ? 57 ? ? 83 ? ? 42 ? ?34 ? ?81 ? ? 12 ? ? ?29 ? ? ? ?{72 設置為基準點,lo指向開始,hi指向結尾。從后面掃描,發現29<72 把29賦值為72}

現在數據 ? ? ?29 ? 6 ? 57 ? ? 83 ? ? 42 ? ?34 ? ?81 ? ? 12 ? (29) ? ? ?{從前面掃描,找比72大的,掃描到83,則把83賦值給(29)處}

現在數據 ? ? ?29 ? 6 ? 57 ?(83) ?42 ? ?34 ? ?81 ? ? 12 ? ? ? 83 ? ? ? ?{從后面掃描,找比72小的,發現12,將12賦值給(83)}

現在數據 ? ? ?29 ? 6 ? 57 ? ? 12 ? ? 42 ? ?34 ? ?81 ? ?(12) ? ? 83 ? ? ? ?{ 從前面掃描,找比72大的,發現81,把81賦值給(12)}

現在數據 ? ? ?29 ? 6 ? 57 ? ? 12 ? ? 42 ? ?34 ? (81) ? ?81 ? ? ?83 ? ? ? ? {hi ?lo 重合,基準點72賦值給(81),完成一次循環}

一輪數據 ? ? ?29 ? 6 ? ?57 ? ?12 ? ? 42 ? ?34 ? ? 72 ? ? 81 ? ? ?83 ? ? ? ?{基準點的最終位置確定}

其過程圖如下:

其算法實現找到基準點位置:需要定義lo,hi

?

   private int partition(int sortArray[],int low,int hight){/*** key 值為基準點的值  */int key = sortArray[low];while(low<hight){/*** 從后半部分開始掃描,大于key的,hi直接-1,如果小于key,則把該元素賦值給array[lo];*/while(low<hight && sortArray[hight]>=key)hight--;sortArray[low] = sortArray[hight];/*** 從前半部分掃描,小于key的,lo直接+1,如果大于key,則把該元素賦值給array[hi];*/while(low<hight && sortArray[low]<=key)low++;sortArray[hight] = sortArray[low];}/*** 然后lo hi重合時,結束,把key賦值給array[lo]即可*/sortArray[low] = key;return low;}

到此找到基準點的最終位置,然后以基準點現在位置,分為左右兩部分,在循環上面的操作

 public void sort4(int[] data,int low,int hight){if(low<hight){int result = partition(data,low,hight);sort4(data,low,result-1);sort4(data,result+1,hight);}}

?

?

?

轉載于:https://www.cnblogs.com/galibujianbusana/p/6536725.html

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

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

相關文章

python中until函數_等待應用程序窗口:python中的pywinauto.timings.WaitUntilPasses

我試圖在pywinauto中使用waituntilpasses來給應用程序時間打開一個新窗口.我已使用SWAPY識別窗口詳細信息.為了進行測試,我手動打開了子窗口,因此WaitUntilPasses應該立即看到該窗口,但是沒有看到.語法顯示為OK,因為我可以找到并打印find_windows的輸出,如下所示&#xff1a;xx…

synchronized 異常_由淺入深,Java 并發編程中的 Synchronized

synchronized 作用synchronized 關鍵字是 Java 并發編程中線程同步的常用手段之一。1.1 作用&#xff1a;確保線程互斥的訪問同步代&#xff0c;鎖自動釋放&#xff0c;多個線程操作同個代碼塊或函數必須排隊獲得鎖&#xff0c;保證共享變量的修改能夠及時可見&#xff0c;獲得…

mysql正則通配符全解_mysql正則表達式與通配符

擴展正則表達式的一些字符是&#xff1a; “.”匹配任何單個的字符。 一個字符類“[...]”匹配在方括號內的任何字符。例如&#xff0c;“[abc]”匹配“a”、“b”或“c”。為了命名字符的一個范圍&#xff0c;使用一個“-”。“[a-z]”匹配任何小寫字母&#xff0c;而“[0-9…

dos常用文件操作命令

1、DIR 含義&#xff1a; 顯示指定目錄下的文件和子目錄列表 類型&#xff1a; 內部命令 格式&#xff1a; DIR[drive:][path][filename][/p][/w][/A[[:]attributes]][/O[[:]sortorder]][/S][/B][/L] 舉例&#xff1a; DIR DIR D:\px2 DIR D:\px2\*.txt DIR /A:D /O:D 2、COPY…

使您的Java代碼聞起來很新鮮

by Marco Massenzio由Marco Massenzio 使您的Java代碼聞起來很新鮮 (Make your Java code smell nice and fresh) A few years ago I joined a startup working on a cloud enterprise service that was originally built by an offshore team.幾年前&#xff0c;我加入了一家…

MySQL時間戳與日期格式的相互轉換

MySQL時間戳與日期格式的相互轉換&#xff0c;PHP時間戳與日期格式的相互轉換 MySQL: 獲取當前時間SELECT NOW(); // 2018/10/11 14:22:51 時間日期格式轉換成時間戳格式&#xff0c;UNIX_TIMESTAMP()SELECT UNIX_TIMESTAMP(NOW()); // 1539238930 時間戳格式轉換成時間日期格式…

Linux內存分配機制之伙伴系統和SLAB

轉載請注明原文地址&#xff1a;http://www.cnblogs.com/ygj0930/p/6539590.html 內核內存管理的一項重要工作就是如何在頻繁申請釋放內存的情況下&#xff0c;避免碎片的產生。這就要求內核采取靈活而恰當的內存分配策略。通常&#xff0c;內存分配一般有兩種情況&#xff1a…

this.$modal.confirm 自定義按鈕關閉_自定義函數,讓你玩轉Excel得心應手

讓“自動更正”輸入統一的文本&#xff0c;你是不是經常為輸入某些固定的文本,如《電腦報》而煩惱呢?那就往下看吧。1.執行“工具→自動更正”命令,打開“自動更正”對話框。2.在“替換”下面的方框中輸入“pcw”(也可以是其他字符,“pcw”用小寫),在“替換為”下面的方框中輸…

php mysql 排名算法_MySQL PHP:優化排名查詢和計數子查詢

這是原始數據,并希望根據得分(count(tbl_1.id))對它們進行排名.[tbl_1]id | name1 | peter2 | jane1 | peter2 | jane3 | harry3 | harry3 | harry3 | harry4 | ron因此,制作臨時表(tbl_2)來計算每個id的分數.SELECT id, name, COUNT( id ) AS scoreFROM tbl_1GROUP BY idORDER…

CCF-CSP 最大的矩形

問題描述在橫軸上放了n個相鄰的矩形&#xff0c;每個矩形的寬度是1&#xff0c;而第i&#xff08;1 ≤ i ≤ n&#xff09;個矩形的高度是hi。這n個矩形構成了一個直方圖。例如&#xff0c;下圖中六個矩形的高度就分別是3, 1, 6, 5, 2, 3。請找出能放在給定直方圖里面積最大的矩…

Stack Overflow 2016年對50,000名開發人員進行的調查得出的見解

Today, Stack Overflow released the results of their 2016 survey of more than 50,000 developers.今天&#xff0c;Stack Overflow發布了他們2016年對50,000多名開發人員進行的調查的結果。 I’ve combed through this big document to bring you the most surprising ins…

web管理

1.站點根目錄下查找是否被放置webshell***根據語句判斷是不是PHP***腳本# find /storage/www/ -name "*.php" | xargs grep-in --color "eval("# grep -i --include*.php -r system\s*\( /storage/www/2.統計訪問日志中來自同ip出現的次數分析盜鏈、***、機…

MySQL的主從復制云棲社區_MySQL-主從復制

前言前篇說了作為運維在數據庫塊最起碼要會兩大技能&#xff0c;今天來說說第二技能--主從復制隨著業務的增長&#xff0c;一臺數據庫服務器以滿足不了需求了&#xff0c;負載過重&#xff0c;這時候就需要減壓&#xff0c;實現負載均衡讀寫分離&#xff0c;一主一從或一主多從…

數據存儲(SharedPreferences存儲)

SharedPreferences是通過 鍵值對 的方式存儲數據SharedPreferences是通過鍵值對的方式存儲的 將數據存儲到SharedPreferences中有3種方法&#xff1a;1.Context類中的getSharedPreferences()方法2.Activity類中的getPreferences()方法3.PreferencesManager類中的getDefaultShar…

編程程序的名稱要記住嗎_學習編程時要記住的5件事

編程程序的名稱要記住嗎by Kurt由庫爾特 學習編程時要記住的5件事 (5 Things to Remember When You’re Learning to Program) Learning to program is challenging. Aside from choosing a language or setting up a development environment that you know nothing about, t…

mysql 數據分析的步驟_數據分析8個主要步驟

# 在對數據進行分析時&#xff0c;主要細分為明確目標、應用思維和如下8個具體步驟&#xff1a;1、讀取數據2、清洗數據3、操作數據4、轉換數據5、整理數據6、分析數據7、展現數據8、總結報告接下來將介紹使用python來具體處理數據&#xff0c;包括上面幾個步驟的實現&#xff…

python學習的一個定位_python學習之——selenium元素定位

web自動化測試按步驟拆分&#xff0c;可以分為四步操作&#xff1a;定位元素&#xff0c;操作元素&#xff0c;獲取返回結果&#xff0c;斷言(返回結果與期望結果是否一致)&#xff0c;最后自動出測試報告。其中定位元素尤為關鍵&#xff0c;此篇是使用webdriver通過頁面各個元…

Invoker

Invoker 是實體&#xff0c;dubbo外其他對象的轉化。轉載于:https://www.cnblogs.com/gtaxmjld/p/9786894.html

如何在開源社區貢獻代碼_如何在15分鐘內從瀏覽器獲得您的第一個開源貢獻

如何在開源社區貢獻代碼Matt Mullenweg, founder of Automattic, recently offered this advice to aspiring developers: “Contribute to open source.”Automattic的創始人Matt Mullenweg最近向有抱負的開發人員提供了以下建議 &#xff1a;“ 致力于開源。 ” Mullenweg —…

小心情。

從一開始學習html到現在的nodejs&#xff0c;也有段時間了&#xff0c;那個時候什么都不知道&#xff0c;記得一兩年之前還沉迷在一些網絡技術的圈子里面&#xff0c;每天看著那些大牛&#xff0c;感覺都很是厲害&#xff0c;每一項技術總是那樣的讓我著迷&#xff0c;從易語言…