數據結構排序法之雞尾酒排序法he快速排序法

雞尾酒排序,也叫定向冒泡排序,是冒泡排序的一種改進。此算法與冒泡排序的不同處在于從低到高然后從高到低,而冒泡排序則僅從低到高去比較序列里的每個元素。他可以得到比冒泡排序稍微好一點的效能。

// 兩兩互換
void swap (int* a, int i, int j)
{int tmp;tmp  = a[i];a[i] = a[j];a[j] = tmp;
}// 雞尾酒法
void tail1 (int* a, int len)
{// 初始化邊界int left  = 0;int right = len - 1;int i;while (left < right){// 前半輪將最大元素放到最后面for (i = left; i < right; i++){if (a[i] > a[i+1]){swap (a, i, i+1);}}right--;                        // 右邊界左移一位// 后半輪將最小元素放到最前面for (i = right; i > left; i--){if (a[i-1] > a[i]){swap (a, i, i-1);}}left++;                     // 左邊界右移一位}   
}

快速排序(Quicksort)是對冒泡排序的一種改進。
它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然后再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。

// 兩兩互換
void swap (int* a, int i, int j)
{int tmp;tmp  = a[i];a[i] = a[j];a[j] = tmp;
}// 分區操作,返回基準值的下標
int partition(int *a, int left, int right)
{int pivot = a[right];int index = left;   // 如果找到一個比基準值小的元素,與下標為index的元素交換int i;for (i = left; i < right; i++){if (a[i] < pivot){swap (a, i, index);index++;}}swap (a, index, right);return index;   // 基準值所在位置下標
}void qSort(int *a, int left, int right)
{if (left < right){int pivot = partition(a, left, right);  // 進行分區操作,找基準值下標qSort (a, left, pivot-1);     // 對左邊部分進行快速排序qSort (a, pivot+1, right);    // 對右邊部分進行快速排序    }
}

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

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

相關文章

VSCode 多開、環境對比

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 多開&#xff1a; 第一種&#xff1a;win10的開始菜單&#xff0c;在vscode圖標右鍵選擇“新開窗口”&#xff0c;這樣就多了一個vscode…

前言_工作兩年自我感觸

17年大學畢業&#xff0c;到今天整整工作兩年&#xff0c;從前端到數據分析&#xff0c;從上家公司&#xff08;簡稱A&#xff09;到現公司&#xff0c;想趁著今天是參加工作兩年的紀念日&#xff0c;回憶過往&#xff0c;結合現狀有感而發。 剛畢業的時候&#xff0c;啥都學&a…

數據結構排序法之堆排序he歸并排序

堆排序&#xff08;Heapsort&#xff09;是指利用堆這種數據結構所設計的一種排序算法。堆是一個近似完全二叉樹的結構&#xff0c;并同時滿足堆性質&#xff1a;即子結點的鍵值或索引總是小于&#xff08;或者大于&#xff09;它的父節點。 堆排序的時間&#xff0c;主要由建…

超詳細設置 Idea 類注釋模板和方法注釋模板

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 網上找了一下&#xff0c;沒有很詳細且正確介紹Idea配置注釋模板的&#xff0c;于是結合多篇文章自己琢磨整理出如下。 設置類注釋模板…

手動創建兩個文本文件text1.txt和text2.txt,按要求創建text3.txt

實現在text1.txt和text2.txt文件中除去首行和末尾對應的數據&#xff0c;要求三個文本內容如下&#xff1a; text1 text2 text3begin begin begin10 11 12 15 16 17 …

感情

團結 共患難的感情轉載于:https://www.cnblogs.com/yyjh/p/11139749.html

誰搶走了中國男人的老婆?

“老夫少妻”、“包二奶”、“洋媳婦”、“單身貴族”、“丁克家庭”都是當今最時髦的詞匯。這看似“你情我愿”的現象背后竟隱藏著巨大隱患! 目前中國男女比例是119&#xff1a;100&#xff0c;某些地區已達130&#xff1a;100;中國將有5百萬以上光棍&#xff0c;這對中國社會…

latex 幻燈片演示模板

http://zzg34b.w3.c361.com/templet/slide.htm轉載于:https://www.cnblogs.com/binterminator/articles/1621647.html

Linux 文件系統編程之系統調用和標準I/O庫

系統調用 訪問設備驅動程序的底層函數主要有&#xff1a; open:打開文件或者設備。 read:從打開的文件或者設備里面讀取數據。 write:向文件或者設備寫數據。 close:關閉文件或者設備。 open系統調用&#xff1a; #include <fcntl.h> #include <sys/types.h> #in…

mysql 索引:類型 、創建

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一個簡單的對比測試 以我去年測試的數據作為一個簡單示例&#xff0c;20多條數據源隨機生成200萬條數據&#xff0c;平均每條數據源都重…

水調歌頭·中秋

轉載于:https://www.cnblogs.com/divineka/archive/2004/09/04/39560.html

代碼面試最常用的10大算法

摘要&#xff1a;面試也是一門學問&#xff0c;在面試之前做好充分的準備則是成功的必須條件&#xff0c;而程序員在代碼面試時&#xff0c;常會遇到編寫算法的相關問題&#xff0c;比如排序、二叉樹遍歷等等。 在程序員的職業生涯中&#xff0c;算法亦算是一門基礎課程&#…

fork與vfork的區別

fork與vfork的區別 1.vfork保證子進程先運行&#xff0c;在它調用exec或exit之后父進程才可能被調度運行。如果在調用這兩個函數之前子進程依賴于父進程的進一步動作&#xff0c;則會導致死鎖。 2.fork要拷貝父進程的進程環境&#xff1b;而vfork則不需要完全拷貝父進程的進程…

IDEA 2018 集成 MyBatis Generator 插件 詳解、代碼生成

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1、修改maven的pom文件 只需要將如下依賴添加到pom.xml文件中即可。&#xff08;注意此處是以plugin的方式&#xff0c;放在<plugins…

MongoDB監控及報警

轉載請注明出處&#xff1a;https://www.cnblogs.com/shining5/p/11142357.html MongoDB監控及報警 Prometheus是由SoundCloud開發的開源監控報警系統和時序列數據庫&#xff0c;其使用go語言開發。基本原理是通過HTTP協議周期性抓取被監控組件的狀態&#xff0c;任意組件只要提…

umask命令:設置文件的默認權限掩碼

今天接觸到了掩碼&#xff0c;從博客上總結了一些關于掩碼解釋比較全面的分析&#xff0c;和大家分享下。 文件權限是linux系統中的一種安全機制&#xff0c;通過設置不同的權限&#xff0c;可以達到限制用戶操作的目的&#xff0c;有效地保證了文件的完整性。 默認的情況下&…

如何學習開源項目及Ceph的淺析

摘要&#xff1a;開源技術的學習和采用確實存在著一定門檻&#xff0c;然而學習各種開源項目已經成為許多開發者不可回避的工作內容。那么&#xff0c;對于類似OpenStack的大型開源項目&#xff0c;開發者該如何著手&#xff0c;這里我們看章宇的分享。 【編者按】在 上一屆O…

Mybatis 中更新方法: updateByPrimaryKeySelective() 和 updateByPrimaryKey() 的區別

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 int updateByPrimaryKeySelective(TbItem record); int updateByPrimaryKey(TbItem record); 上面的是逆轉工程生成的Mapper接口 對應…

SHT知識庫操作要點

1.保存文檔庫模板&#xff1a; 知識庫---設置---文檔庫設置---權限管理---將文檔另存為模板2.設置版本號&#xff1a;知識庫---設置---文檔庫設置---常規設置---版本控制設置3.設置文檔庫權限&#xff1a;列表---設置---文檔庫設置---此文檔庫的權限&#xff08;用戶組讀取列表…

淺談三種特殊進程:孤兒進程,僵尸進程和守護進程

昨天學了進程控制&#xff0c;就這三種特殊的進程研究了一下&#xff0c;其中也借鑒了一些前人總計的經驗。 1、孤兒進程 如果父進程先退出,子進程還沒退出那么子進程將被 托孤給init進程,這里子進程的父進程就是init進程(1號進程).其實還是很好理解的。 // 父進程先子進程退…