插入排序法之——直接插入排序、折半插入排序、希爾排序

// test20.cpp : 定義控制臺應用程序的入口點。
//

#include "stdafx.h"
#include<iostream>
#include<vector>
#include<string>
#include<queue>
#include<stack>
#include<cstring>
#include<string.h>
#include<deque>
#include <forward_list>using namespace std;class Solution {
public:void InsertSort(vector<int> &vec)//直接插入排序{for (int i = 1;i < vec.size();++i)//從第二個數開始進行直接插入排序{int num = vec[i];int flag = -1;//如果flag==-1,則是沒有找到比num大的數,所以位置保持不變for (int j = 0;j < i;++j) {if (num < vec[j])//在前i個數中找到大于或等于num的數,插入到第一個大于num的數前面{flag = j;break;}}//      for (flag;flag <= i;++flag)if (flag == -1) continue;//用continue,而不是break,結束本次循環,執行下次循環while (i > flag){vec[i] = vec[i-1];i--;}vec[flag] = num;}print(vec);}void BInsertSort(vector<int> &vec){for (int i = 1;i < vec.size();++i){int num = vec[i];int flag = -1;//大于num的節點位置,即插入num的位置int low = 0;  //用折半查找發找到第一個大于num的節點位置int high = i;int mid = (low + high) / 2;while (low <= high){if (num >= vec[mid])//要找到第一個大于num的位置,注意這里的等于號!!!!!!!!!!!!!!!{low = mid + 1;mid = (low + high) / 2;}else {high = mid - 1;mid = (low + high) / 2;}}//如果high==i,就是沒找到大于num的數,不用移動//如果low==0,就是要把num插入最前面//如果不符合上述兩個條件,則把節點插入到low前面if(high==i)continue;else flag = low;//  if (flag == -1) continue;while (i>flag){vec[i] = vec[i - 1];--i;}vec[flag] = num;}print(vec);}void ShellInsertSort(vector<int> &vec){SheellSort(vec,1);}//希爾排序要設置排序間隔void  SheellSort(vector<int> &vec,int dk)//分成dk組,每一組進行直接插入排序{for (int i = dk;i < vec.size();++i)//從第二個數開始判斷{int num = vec[i];int flag = -1;int j = i - dk;for (j;j >=0;j -= dk)//從0號單元開始比較,依次往后比較,找到第一個小于num的數字,插入其后面{//如果沒有找到,則fla==-1,插入到最前面if (num >= vec[j])//如果flag==j,則不用做處理{flag = j;break;}}if (flag == -1){while (i>j+dk){vec[i] = vec[i-dk];i = i - dk;}vec[j + dk] = num;}else{while (i>flag + dk){vec[i] = vec[i - dk];i = i - dk;}vec[flag + dk] = num;}}print(vec);}void print(vector<int> &vec)//打印數據{for (auto it = vec.begin();it != vec.end();++it){cout << *it << "  ";}cout << endl;}};
int main()
{
//  vector<int> vec = { 1,3,2,7,6,5,4,8,9 };
//  vector<int> vec = { 1,3,2};vector<int> vec = { 49,38,65,97,76,13,27,49,55,4};//vector<int> vec = { 49,38,65,97,76,13,27,55,4 };Solution so;//原來的序列cout << "原來的序列:   ";so.print(vec);//直接插入排序:cout << "直接插入排序:";so.InsertSort(vec);//折半排序cout << "折半插入排序:";so.BInsertSort(vec);//希爾排序cout << "希爾排序:";so.ShellInsertSort(vec);return 0;
}

轉載于:https://www.cnblogs.com/wdan2016/p/6044792.html

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

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

相關文章

linux idea 快捷鍵,Linux 下 IDEA 的 Ctrl+Alt+S

前言這是個困擾我一年多的問題&#xff0c;今天終于解決了……起因一年前將主系統換成 Arch Linux 后&#xff0c;其他一切正常就是 IDEA 的打開設置的快捷鍵 ctrlalts 失效&#xff0c;讓我很是頭疼。雖然不是很重要&#xff0c;但是對于我這種強迫癥來說別提多難受了……我曾…

修改input的placeholder顏色

1、CSS選擇器 因為每個瀏覽器的CSS選擇器有所差異&#xff0c;所以需要針對每個瀏覽器做單獨的設定。 ::-webkit-input-placeholder { /* WebKit browsers */ color: #999; } :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ color: #999; } ::-moz-placeholder { /* Mozil…

解決Spring自動裝配中的循環依賴

我認為這篇文章是在企業應用程序開發中使用Spring的最佳實踐。 使用Spring編寫企業Web應用程序時&#xff0c;服務層中的服務量可能會增加。 服務層中的每個服務可能會消耗其他服務&#xff0c;這些服務將通過Autowire注入。 問題&#xff1a;當服務數量開始增加時&#xff0…

01.MD5加密

namespace _01.MD5加密{ class Program { static void Main(string[] args) { //MD5加密就是給想要的密碼或者其它字符加密 //如果字符串被加密成MD5值之后,是不可逆的. //字符串123 的MD5 64位加密形式是 202cb962ac59075b964b07152d234b70 Console.WriteLine("請輸入需要…

C語言數字3轉變字符 3 程序,大學c語言知識點總結

大學c語言知識點總結C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。一起來看看大學c語言知識點總結吧!大學c語言知識點總結1、編譯預處理不是C語言的一部分&#xff0c;不再運行時間。C語言編…

接觸Jenkins(Hudson)API,第1部分

哪一個-哈德森還是詹金斯&#xff1f; 都。 幾個月前&#xff0c;我開始使用Hudson v1.395來從事這個小項目&#xff0c;在出現巨大分歧之后又回到了這個項目。 我以此為契機&#xff0c;看我將來選擇永久搬到詹金斯時是否會遇到任何重大問題。 有很多麻煩-最值得注意的是&…

使用javascript模擬常見數據結構(四)

七、樹 樹是一種非線性的分層的數據結構&#xff0c;在現實生活中比較常見的例子比如家譜和公司的組織架構圖&#xff0c;如下所示&#xff1a; 一個樹結構存在著一系列的父子結構&#xff0c;并且有著一個根節點&#xff0c;這種結構本質上表明了一對多的關系。 那&#xff0c…

C語言中實際參數太多,c – 宏的實際參數太多了?

碼&#xff1a;#include using namespace std;#define ADD(x,y) ((x)(y))int main( int argc, char** argv ){cout << ADD(1,2,) << endl;return 0;}編譯器輸出&#xff1a;1>Compiling…1>main.cpp1>c:\warn_test\main.cpp(9) : warning C4002: too many…

Web開發框架–第2部分:Play Framework 2.0

作為 評估系列 的第一個候選人&#xff0c; 我們回顧了 Play Framework v2.0 。 可以從Play 文檔站點獲得本文所使用的教程和參考文檔。 本文的第一部分將介紹我們建議對每個框架執行的一組任務&#xff0c;然后繼續評估每個標準項。 在開發工作站中安裝框架 非常簡單&#…

最全Pycharm教程(10)——Pycharm調試器總篇

最全Pycharm教程&#xff08;1&#xff09;——定制外觀 最全Pycharm教程&#xff08;2&#xff09;——代碼風格 最全Pycharm教程&#xff08;3&#xff09;——代碼的調試、執行 最全Pycharm教程&#xff08;4&#xff09;——有關Python解釋器的相關配置 最全Pycharm教程&am…

Looper.prepare()和Looper.loop()

什么時候需要 Looper Looper用于封裝了android線程中的消息循環&#xff0c;默認情況下一個線程是不存在消息循環&#xff08;message loop&#xff09;的&#xff0c;需要調用Looper.prepare()來給線程創建一個消息循環&#xff0c;調用Looper.loop()來使消息循環起作用&#…

超速問題的c語言編程,超速行駛問題--精選.doc

超速行駛問題摘要本文主要研究的是探討驅車從始發地至目的地的最短時間路徑問題和最少花費問題&#xff0c;以及在超速情況下的最短時間和最少花費問題。首先&#xff0c;從整個題目的兩個問題入手&#xff0c;發現兩個問題都是優化問題&#xff0c;具有一定的聯系。然后針對第…

重新查看Play Framework發布的值

與Play Framework 2.0一起使用發布的值而不定義表單映射&#xff0c;可能不像Play 1.x那樣明顯&#xff0c;這就是為什么我要編寫此快速備忘單。 對于此快速示例&#xff0c;讓我們定義以下視圖&#xff1a; app / views / index.scala.html (message: String)message: messa…

matlab 微積分

符號變量&#xff0c;symbolic variable 1. 高階導數 高階導數的計算&#xff0c;當然可以用手工的方式&#xff0c;但顯然這種機械重復的推導&#xff0c;更適用于計算機的計算方式&#xff1a; f(x)sinxx24x3?d4fdx4>> syms x; >> f sin(x) / (x^24*x3); >&…

如何查看Ubuntu版本,以及Linux內核版本??

查看Ubuntu版本&#xff1a; 方法一&#xff1a; cat /etc/issue 方法二&#xff1a; sudo lsb_release -a 查看內核版本&#xff1a; uname -r 轉載于:https://www.cnblogs.com/tanrong/p/6937749.html

c語言編碼風格,講嵌入式C語言編碼風格.ppt

講嵌入式C語言編碼風格目 錄 簡介及說明 語言規則 1.基礎 2.數據 3.說明與表達式 4.函數 5.內存及資源 6.源文件 風格指導 7.程序書寫 8.命名 9.文檔 簡介及說明 正確性 易維護性 易移植性 代碼的高效性 語言規則——基礎 編寫清晰表達設計思路和意圖的代碼 針對易讀來優化代碼…

使用Gradle引導舊式Ant構建

Gradle提供了幾種不同的方式來利用您現有的對Ant的投資&#xff0c;包括積累的知識和您已經放入構建文件中的時間。 這可以極大地方便將Ant生成的項目移植到Gradle的過程&#xff0c;并為您提供逐步進行此操作的路徑。 Gradle文檔在描述如何在Gradle構建腳本中使用Ant方面做得很…

實現chrome擴展啟動本地進程 - 補充

實現chrome擴展啟動本地進程 - 補充 標簽&#xff1a; chrome擴展啟動本地程序訪問本地磁盤2014-10-17 11:42 6753人閱讀 評論(17) 收藏 舉報分類&#xff1a;Chrome Plugin版權聲明&#xff1a;本文為博主原創文章&#xff0c;未經博主允許不得轉載。 示例 主要包含如下部分 c…

SpringMVC整合MongoDB

首先&#xff0c;在pom文件中新增spring-data-mongodb的依賴&#xff1a; <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>1.8.1.RELEASE</version>&l…

單路電壓表c語言編程,用AT89C51單片機制作的數字電壓表

此數字電壓表&#xff0c;利用A/D轉換原理將被測模擬量轉換成數字量&#xff0c;并通過控制系統用數字方式顯示測量結果。本設計采用AT89C51單片機&#xff0c;ADC0809進行模/數轉換&#xff0c;能夠測量8路0&#xff5e;5V的輸入電壓值&#xff0c;可用四位LED數碼管輪流或單路…