排序(Sort)--【一】

?????? 排序,對于大家再熟悉不過了吧。我們之前在學習c語言的時候接觸過的冒泡排序,選擇排序等。今天給大家介紹兩種新的排序。

1、直接插入排序


升序排列:將第一個數確定好,從下標為1的數開始插入,如果插入的數比前一個數大,就插入到前一個數后的位置。否則,將前一個數的位置后移,再與再往前的數比較,依次類推。

時間復雜度為:O(N*N)???????? 最好情況:O(N)

主要實現代碼(vs2013):

	#pragma once#include<iostream>using namespace std;void InsertSort(int *a,size_t size){for(size_t i = 1; i < size; ++i){int end = i-1;int tmp = a[i];while(end >= 0){if(tmp < a[end]) //升序  //if(tmp > a[end]) //降序{a[end+1] = a[end];--end;}else{break;}}a[end+1] = tmp;}}void Display(int *a,size_t size){for(size_t i = 0; i < size; ++i){cout<<a[i]<<" ";}cout<<endl;}void TestInsert(){int a[] = {2,5,4,9,3,6,8,7,1,0};size_t size = sizeof(a)/sizeof(a[0]);InsertSort(a,size);Display(a,size);}

運行結果:



2、希爾排序

?????? 當在插入排序中,數據特別多時,且不是有序的。這時采用插入排序就特別的慢。尤其是對于升序情況,所給的數據是降序,那么就需要每次挪動數據。這就顯得效率比較低了。于是引入了希爾排序,將它們先排列的接近有序,再進行插入排序就容易多了。


主要實現代碼(vs2013):

void ShellSort(int* a,size_t size)
{int gap = size;int end = 0;int tmp = 0;while(gap > 1){gap = gap/3+1;for(size_t i = gap; i < size; ++i){end = i-gap;tmp = a[i];while(end >= 0){if(tmp > a[end])  //降序   //if(tmp < a[end]) 升序{a[end+gap] = a[end];end -= gap;}elsebreak;}a[end+gap] = tmp;}}
}void Display(int *a,size_t size)
{for(size_t i = 0; i < size; ++i){cout<<a[i]<<" ";}cout<<endl;
}void TestInsert()
{int a[] = {0,1,2,3,4,5,6,7,8,9};size_t size = sizeof(a)/sizeof(a[0]);ShellSort(a,size);Display(a,size);
}

運行結果:




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

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

相關文章

用python os.system 執行 批處理的時候, 出現的一些問題

如果 在一個py文件里面 , 假設用 三條語句 os.system(a.bat) os.system(b.bat) os.system(c.bat)這樣的話 只會最后一條生效.

wait()和waitpid()的參數解析

進程的等待 #include <sys/types.h> #include <sys/wait.h> wait(),waitpid()區別&#xff1a; 在一個子進程終止前&#xff0c;wait使其調用者阻塞&#xff0c;而waitpid有一個選項&#xff0c;可使調用者不阻塞;waitpid()并不等待在其調用之后的第一個終止的…

快速排序--全集

快速排序&#xff1a;一聽名字就知道這種排序很快的&#xff0c;是吧&#xff1f;沒錯&#xff0c;它是一種效率比較高的排序算法。 快速排序采用的是分治的思想。 比如&#xff0c;將一串數中的一個元素作為基準&#xff0c;然后將比它小的數排在它的左邊&#xff0c;比它大…

task_struct結構體查找

網上有很多解析task_struct結構體的文章&#xff0c;可是都沒有說這個結構體到底在哪里&#xff1f; 這個結構體位于頭文件 shced.h cd / find -name sched.h 顯示結果如下 注意只有 位于內核中的include 才是正確的。 /usr/src/kernels/2.6.32-431.el6.i686/include/linux…

使用python 創建快捷方式

import os import pythoncom from win32com.shell import shell from win32com.shell import shellcondef set_shortcut(): # 如無需特別設置圖標&#xff0c;則可去掉iconname參數try:filename r"D:\AppServ\timer\win_cron_zq\timer.exe" # 要創建快捷方式的文件…

python 各個模塊的簡單介紹 轉載

轉自 https://www.jianshu.com/p/f8c43e25c02e

鬧鐘函數alarm()的解釋與實踐

alarm 定義 也稱為鬧鐘函數&#xff0c;它可以在進程中設置一個定時器&#xff0c;當定時器指定的時間到時&#xff0c;它向進程發送SIGALRM信號。可以設置忽略或者不捕獲此信號&#xff0c;如果采用默認方式其動作是終止調用該alarm函數的進程。 #include "head.h&quo…

Linux下如何設置權限讓用戶只刪除自己的文件(粘滯位)

之前我們知道如何針對用戶和用戶組來設置文件權限。通常是用三個八進制來設置權限的&#xff0c;這里我要說的是&#xff0c;其實是由四個八進制表示的。其中第一個八進制我們通常是忽略的。第二個到第四個是對應于SUID,SGID,sticky-bit。 SUID&#xff1a;設置了SUID 位的文件…

CentOS安裝yum 鏡像 舉例阿里云鏡像

如何安裝yum 鏡像 CentOS 1、備份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2、下載新的CentOS-Base.repo 到/etc/yum.repos.d/ CentOS 5 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.r…

python在ubuntu執行sh腳本,提示權限不夠的解決方法, 轉載

https://blog.csdn.net/weixin_40320794/article/details/81772194

Vim簡單配置

vim配置&#xff1a; &#xff08;在Centos6.5下配置vim&#xff09; 1.找到用戶的主工作目錄&#xff0c;ls看是否有.vimrc文件&#xff0c;有的話打開即可。沒有的話自己touch一個。vim進入.vimrc中&#xff1a; set nu 設置行數 colorscheme desert syntax enabl…

運算符面試題(劍指offer,面試寶典,牛客網)

利用一個宏實現兩個數的交換&#xff1f;不使用if,?,switch或者其他判斷語句比較兩個變量的大小&#xff1f;利用位運算實現加法&#xff1f;以下程序輸出結果是&#xff1f;用位運算實現求平均數&#xff1f;不用循環判斷一個數是不是2的N次方&#xff1f; 利用一個宏實現兩個…

js 出現 replace 無法完全替換 指定字符串的時候的解決辦法

/{/g 通過這種方式替換掉 replace( /這里填寫需要被替換的字符串/g , "");

[WPS筆試題]實現棧的push,pop,max且時間復雜度為O(1)

今天做了一下WPS的筆試題&#xff0c;遇到了一道關于棧的題&#xff0c;覺得挺有意思的&#xff0c;就寫篇博客分享一下吧~~ 題目要求&#xff1a;要求實現棧的數據結構&#xff0c;在該類型中實現一個能夠得到棧的最大元素的max函數&#xff0c;在該棧中&#xff0c;調用max,…

MarkDown生成目錄索引

123 在第一行開頭寫[TOC] 必須是第一行&#xff0c;不可以在前面加別的東西。 1 2 3

ubuntu 如何用root身份進行登錄

公司有個小項目, 需要用python調用 sh腳本來執行一些東西, 執行腳本的時候需要輸入密碼 類似 sudo S paaswd 腳本, 但是給客戶部署的話, 再讓客戶客戶 保存密碼到配置文件, 就顯得麻煩, 就想到用root方式去登陸系統, 結果用了網上的方法, 還是登陸不進去, 最后結合簡書的一個方…

[劍指Offer]替換空格

今天看題的時候&#xff0c;遇到一個替換空格的題目&#xff0c;分析一下哈。 題目要求&#xff1a;把字符串中的每個空格替換成“%20”。例如輸入“we are happy”&#xff0c;則輸出“we%20are%20happy”。 解題思路&#xff1a;我們首先想到的是&#xff1a;移位思想。遇到…

C語言關鍵字 ISO/ANSI C90 C99 C11

面試考點 https://blog.csdn.net/csdn_kou/article/details/81113215 * 有的常用的我們都不知道是關鍵字&#xff0c;比如sizeof.這是面試中的考點&#xff0c;要注意。 * 同時當回答C語言中有多少關鍵字時&#xff0c;要回答前題條件&#xff0c;時針對哪一個版本

vm15 安裝 mac虛擬機的過程 轉載的

https://blog.csdn.net/weixin_43299649/article/details/82881567

task_struct解析

task_struct是Linux內核的一種數據結構&#xff0c;它用task_struct結構體來描述進程的信息。下面來剖析一下進程中保存的主要的信息有哪些&#xff1f; struct task_struct {//進程的運行時狀態volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */void …