1. 程式人生 > >桶排序 原理(簡單版)

桶排序 原理(簡單版)

在我們生活的這個世界中到處都是被排序過的。站隊的時候會按照身高排序,考試的名次需要按照分數排序,網上購物的時候會按照價格排序,電子郵箱中的郵件按照時間排序……總之很多東西都需要排序,可以說排序是無處不在。現在我們舉個具體的例子來介紹一下排序演算法。

120852kg1dvagi0b1ijtlv.png

  首先出場的我們的主人公小哼,上面這個可愛的娃就是啦。期末考試完了老師要將同學們的分數按照從高到低排序。小哼的班上只有5個同學,這5個同學分別考了5分、3分、5分、2分和8分,哎考的真是慘不忍睹(滿分是10分)。接下來將分數進行從大到小排序,排序後是8 5 5 3 2。你有沒有什麼好方法編寫一段程式,讓計算機隨機讀入5個數然後將這5個數從大到小輸出?請先想一想,至少想15分鐘再往下看吧(*^__^*) 。

113320k0qonzwpnzmt5gpb.png

我們這裡只需藉助一個一維陣列就可以解決這個問題。請確定你真的仔細想過再往下看哦。

首先我們需要申請一個大小為11的陣列int a[11]。OK現在你已經有了11個變數,編號從a[0]~a[10]。剛開始的時候,我們將a[0]~a[10]都初始化為0,表示這些分數還都沒有人得過。例如a[0]等於0就表示目前還沒有人得過0分,同理a[1]等於0就表示目前還沒有人得過1分……a[10]等於0就表示目前還沒有人得過10分。

113320lz09fp0o7ff7h8xf.png 下面開始處理每一個人的分數,第一個人的分數是5分,我們就將相對應a[5]的值在原來的基礎增加1,即將a[5]的值從0改為1,表示5分出現過了一次。

113321w4iew2smzki8kmec.png

  第二個人的分數是3分,我們就把相對應a[3]的值在原來的基礎上增加1,即將a[3]的值從0改為1,表示3分出現過了一次。

113321rmecknx06n92ppu7.png

  注意啦!第三個人的分數也是“5分”,所以a[5]的值需要在此基礎上再增加1,即將a[5]的值從1改為2。表示5分出現過了兩次。

113321a4euiehmeehcgpeb.png

  按照剛才的方法處理第四個和第五個人的分數。最終結果就是下面這個圖啦。

113321k7vs6474q39bo517.png

  你發現沒有,a[0]~a[10]中的數值其實就是0分到10分每個分數出現的次數。接下來,我們只需要將出現過的分數打印出來就可以了,出現幾次就列印幾次,具體如下。   a[0]為0,表示“0”沒有出現過,不列印。   a[1]為0,表示“1”沒有出現過,不列印。   a[2]為1,表示“2”出現過1次,列印2。   a[3]為1,表示“3”出現過1次,列印3。   a[4]為0,表示“4”沒有出現過,不列印。   a[5]為2,表示“5”出現過2次,列印5 5。   a[6]為0,表示“6”沒有出現過,不列印。   a[7]為0,表示“7”沒有出現過,不列印。   a[8]為1,表示“8”出現過1次,列印8。   a[9]為0,表示“9”沒有出現過,不列印。   a[10]為0,表示“10”沒有出現過,不列印。   最終螢幕輸出“2 3 5 5 8”,完整的程式碼如下。
01
#include <stdio.h>
02 int main()
03 {
04 int a[11],i,j,t;
05 for(i=0;i<=10;i++)
06 a[i]=0;  //初始化為0
07
08 for(i=1;i<=5;i++)  //迴圈讀入5個數
09 {
10 scanf("%d",&t);  //把每一個數讀到變數t中
11 a[t]++;  //進行計數
12 }

相關推薦

排序 原理簡單

在我們生活的這個世界中到處都是被排序過的。站隊的時候會按照身高排序,考試的名次需要按照分數排序,網上購物的時候會按照價格排序,電子郵箱中的郵件按照時間排序……總之很多東西都需要排序,可以說排序是無處不在。現在我們舉個具體的例子來介紹一下排序演算法。   首先出場的我們的主人公

python的執行原理簡單說明

不是計算機專業出身,對於這種原理實在是不是很好理解 簡單來說,程式設計語言劃分為兩大類:編譯型語言和解釋型語言。 其實Python和Java/C#一樣,也是一門基於虛擬機器的語言(先編譯後解釋)的直譯器型別 執行過程如下: python: .py  -->.py

氣泡排序簡單

1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="UTF-8"> 5 <title></title> 6 </head&g

luogu P3808 【模板】AC自動機簡單

重復 數組 max space length range spa truct ron 題目背景 這是一道簡單的AC自動機模板題。 用於檢測正確性以及算法常數。 為了防止卡OJ,在保證正確的基礎上只有兩組數據,請不要惡意提交。 管理員提示:本題數據內有重復的單詞,且重

AC自動機簡單

log ble mes i++ ++ printf family 16px pre 覺得AC自動機怪簡單是怎麽回事?(可能題太裸了) 原題鏈接:https://www.luogu.org/problemnew/show/P3808 網上講AC自動機和tire樹講的比我好的d

AndroidStudio中導入module簡單

des col 是把 constrain rate 文件信息 depend core name 1.把要導入成Mudle的項目修改成符合Library的格式 修改該項目中bulid.gradle文件中第一行代碼 把 apply plugin: ‘com.andr

部分和問題簡單

out 用法 main 個數 int n) 意思 OS AC 正式開始學習dfs的用法,突然發現以前不能做的問題原來是深度優先問題; 練手題很簡單,大概意思就是在就是一系列數中是否能找出幾個數相加,使結果等於一個給定的數 1 #include<iostream&g

jmeter分布式壓測簡單

否則 如何 就是 jmeter linux ima 安裝 測試的 .cn   需要使用jmeter模擬大並發的情況時,單臺壓測機不能滿足需求,可進行分布式壓測。   簡單來說就是,多臺機器同時安裝jmeter,選擇一臺機器作為調度機,其他作為壓力機。進行相應的配置後,就可以

「LuoguP3808」 【模板】AC自動機簡單

取數據 length 默認 是個 www str sum 題目 turn 題目背景 通過套取數據而直接“打表”過題者,是作弊行為,發現即棕名。 這是一道簡單的AC自動機模板題。 用於檢測正確性以及算法常數。 為了防止卡OJ,在保證正確的基

經典排序演算法Java

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

快速輸入簡單

#include<cstdio> #include<bitset> using namespace std; #define nc getchar int n,q; bitset<1002> S[10002]; /*快速輸入*/ inline int red()

拓撲排序模板Java

hiho的題目 java時間和記憶體真的炸… 20倍時間 10倍記憶體差不多 import java.util.PriorityQueue; import java.util.Scanner; public class Main { static int t,n,m,u,v

ORB特徵點原理淺顯

轉自https://www.jianshu.com/p/9ee6b2145eaa 緒論 假如我有2張美女圖片,我想確認這2張圖片中美女是否是同一個人。這太簡單了,以我專研島國動作片錘鍊出來的火眼金睛只需輕輕掃過2張圖片就可以得出結論。但是,如果我想讓計算機來完成這個功能就困難重重了:再性感的

python 每日一練之0004題➕file方法簡單

前文 前幾天考試太多一直沒時間寫今天繼續 正文 路漫漫~今天做的第四題發現好像是蠻簡單的,但是看網上大佬們選擇的方法都是正則表示式,。。。我這裡貼出一個簡單的方法吧。為那些看不懂正則的小白們貼一貼 # -*- coding: utf-8 -*- def main(words): with

S2.1 修復影象小程式簡單

用OpenCV自帶的inpaint()演示 CV_EXPORTS_W void inpaint( InputArray src, InputArray inpaintMask, OutputArray dst, double inpaintRad

dubbo原理粗糙

菜雞在面試的時候經常被問到會dubbo嗎?所以開始學習dubbo 我計劃分為三章: 第一章:dubbo框架的架構(簡略說) 第二章:dubbo框架的具體知識以及底層原理 第三章:dubbo框架的應用實戰 這是第一章 1.什麼是dubbo框架? 官網給的解釋是dubbo框架是一個

java執行緒池原理入門——看完還不懂我直播吃香

網上關於java執行緒池的部落格,大多是直接分析ThreadPoolExecutor類的實現,但是他們就像是做中文翻譯一樣,但是很少有講到本質的東西。 這篇部落格從根本出發,看完可以自己實現一個簡單執行緒池。下面正式開始。 一、我們知道,用java建立一條新執行

希爾排序原理java實現

  希爾排序也是排序演算法的一種,先說他的定義,希爾排序是把記錄按下標的一定增量分組,對每組使用直接插入排序演算法排序;隨著增量逐漸減少,每組包含的關鍵詞越來越多,當增量減至1時,整個檔案恰被分成一組,演算法便終止。(摘自百度百科)      看不懂,對吧,

歸併排序原理java實現

  歸併排序也是排序演算法的一種,它是將兩個已經排好序的陣列,合併成另一個排好序的陣列,原理是這樣的:定義一個新陣列,再定義兩個指標,分別指向兩個已經排好序的陣列的第一個元素,然後兩者進行比較,較小的那個數放到新定義的那個陣列的第一個位置,同時,將較小的那個數的

NodeJs 實現 WebSocket 即時通訊簡單

    服務端程式碼 var ws = require("nodejs-websocket"); console.log("開始建立連線...") var game1 = null,game2 = null , game1Ready = false , game2Read