最快最簡單的排序——桶排序(易懂版)
最快最簡單的排序
在我們生活的這個世界中到處都是被排序過的。站隊的時候會按照身高排序,考試的名次需要按照分數排序,網上購物的時候會按照價格排序,電子郵箱中的郵件按照時間排序……總之很多東西都需要排序,可以說排序是無處不在。現在我們舉個具體的例子來介紹一下排序演算法。
首先出場的我們的主人公小哼,上面這個可愛的娃就是啦。期末考試完了老師要將同學們的分數按照從高到低排序。小哼的班上只有5個同學,這5個同學分別考了5分、3分、5分、2分和8分,哎考的真是慘不忍睹(滿分是10分)。接下來將分數進行從大到小排序,排序後是8 5 5 3 2。你有沒有什麼好方法編寫一段程式,讓計算機隨機讀入5個數然後將這5個數從大到小輸出?請先想一想,至少想15分鐘再往下看吧(*^__^*) 。我們這裡只需藉助一個一維陣列就可以解決這個問題。請確定你真的仔細想過再往下看哦。
首先我們需要申請一個大小為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分。
下面開始處理每一個人的分數,第一個人的分數是5分,我們就將相對應a[5]的值在原來的基礎增加1,即將a[5]的值從0改為1,表示5分出現過了一次。 第二個人的分數是3分,我們就把相對應a[3]的值在原來的基礎上增加1,即將a[3]的值從0改為1,表示3分出現過了一次。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 | } |
13 | for (i=0;i<=10;i++) //依次判斷a[0]~a[10] |
14 | for (j=1;j<=a[i];j++) //出現了幾次就列印幾次 |
15 | printf ( "%d " ,i); |
16 | getchar (); getchar (); |
17 | //這裡的getchar();用來暫停程式,以便檢視程式輸出的內容 |
18 | //也可以用system("pause");等來代替 |
19 | return 0; |
20 | } |
輸入資料為
1 | 5 3 5 2 8 |
仔細觀察的同學會發現,剛才實現的是從小到大排序。但是我們要求是從大到小排序,這該怎麼辦呢?還是先自己想一想再往下看哦。
其實很簡單。只需要將for(i=0;i<=10;i++)改為for(i=10;i>=0;i–)就OK啦,快去試一試吧。
這種排序方法我們暫且叫他“桶排序”。因為其實真正的桶排序要比這個複雜一些,以後再詳細討論,目前此演算法已經能夠滿足我們的需求了。
這個演算法就好比有11個桶,編號從0~10。每出現一個數,就將對應編號的桶中的放一個小旗子,最後只要數數每個桶中有幾個小旗子就OK了。例如2號桶中有1個小旗子,表示2出現了一次;3號桶中有1個小旗子,表示3出現了一次;5號桶中有2個小旗子,表示5出現了兩次;8號桶中有1個小旗子,表示8出現了一次。 現在你可以請嘗試一下輸入n個0~1000之間的整數,將他們從大到小排序。提醒一下如果需要對資料範圍在0~1000之間的整數進行排序,我們需要1001個桶,來表示0~1000之間每一個數出現的次數,這一點一定要注意。另外此處的每一個桶的作用其實就是“標記”每個數出現的次數,因此我喜歡將之前的陣列a換個更貼切的名字book(book這個單詞有記錄、標記的意思),程式碼實現如下。01 | #include <stdio.h> |
02 | int main() |
03 | { |
04 | int book[1001],i,j,t,n; |
05 | for (i=0;i<=1000;i++) |
06 | book[i]=0; |
07 | scanf ( "%d" ,&n); //輸入一個數n,表示接下來有n個數 |
08 | for (i=1;i<=n;i++) //迴圈讀入n個數,並進行桶排序 |
09 | { |
10 | scanf ( "%d" ,&t); //把每一個數讀到變數t中 |
11 |
相關推薦最快最簡單的排序——桶排序(易懂版)最快最簡單的排序在我們生活的這個世界中到處都是被排序過的。站隊的時候會按照身高排序,考試的名次需要按照分數排序,網上購物的時候會按照價格排序,電子郵箱中的郵件按照時間排序……總之很多東西都需要排序,可以說排序是無處不在。現在我們舉個具體的例子來介紹一下排序演算法。 首先出場 排序算法(java版)emp ive public while href ava 指針 循環 lec 1. 冒泡算法2. 快速排序3. 歸並排序4. 選擇排序5. 堆排序 排序算法 重要性不言而喻,很多算法問題往往選擇一個好的排序算法往往問題可以迎刃而解 1、冒泡算法 生成十個0~100之間的隨機數,放到陣列中,然後排序輸出。(random版) [必做題]import java.util.Arrays; import java.util.Random; import java.util.Scanner; public class randos { public static void main(String[] args) { Sc Apache伺服器最新版下載、安裝及配置(windows版)這段時間因為專案原因需要用到Apache,第一次接觸這玩意兒,本想查查資料,但看到windows下大多數用到的都是.exe直接安裝的,但這樣傻瓜式操作,沒多大好處,具體就不多說了。言歸正傳,下面來講講 【python學習】——簡單購物系統實現(進化版)實現功能有:輸入賬號,密碼。根據賬號密碼會判斷為買家還是賣家,或者是已經被凍結的賬號(密碼輸入三次錯誤賬號就將被凍結)。買家入口: 1.根據序號購買商品 2.每次購買完成,都會顯示本次購買的商品以及餘額 3.若餘額不足,會提示購買失敗 4.按q鍵可退出 自己動手寫一個簡單的MVC框架(第二版)一、ASP.NET MVC核心機制回顧 在ASP.NET MVC中,最核心的當屬“路由系統”,而路由系統的核心則源於一個強大的System.Web.Routing.dll元件。 在這個System.Web.Routing.dll中,有一個最重要的類叫做UrlRoutingModule,它是一個 輸入日期判斷為該年第幾天 (易懂版)#include<stdio.h> int main() { int i,j,k; while(scanf("%d/%d/%d",&i,&j,&k) != 卡特蘭數的應用(易懂版)不符合要求的數的特徵是由左而右掃描時,必然在某一奇數位2m+1位上首先出現m+1個0的累計數和m個1的累計數,此後的2(n-m)-1位上有n-m個 1和n-m-1個0。如若把後面這2(n-m)-1位上的0和1互換,使之成為n-m個0和n-m-1個1,結果得1個由n+1個0和n-1個1組成的2n位數,即一個不 資料庫主鍵、從鍵(易懂版)什麼是主鍵、外來鍵: 關係型資料庫中的一條記錄中有若干個屬性,若其中某一個屬性組(注意是組)能唯一標識一條記錄,該屬性組就可以成為一個主鍵 比如: 學生表(學號,姓名,性別,班級) 其中每個學生的學號是唯一的,學號就是一個主鍵 課程表(課程編號,課程名,學分) 其中課程編號是唯一的,課程編號就是一個主鍵 成績 排序演算法1:最快最簡單的排序——桶排序(C++版本)下面我要開始摘抄總結了。。。。文字來源於部落格2。。。 1.什麼是桶排序 桶排序,也叫做箱排序,是一種排序演算法,也是排序演算法中最快、最簡單的排序演算法。其中的思想是我們首先要知道所有待排序的範圍,然後需要有在這個範圍的同樣數量的桶,接 啊哈!演算法】最快最簡單的排序——桶排序最快最簡單的排序——桶排序 在我們生活的這個世界中到處都是被排序過的。站隊的時候會按照身高排序,考試的名次需要按照分數排序,網上購物的時候會按照價格排序,電子郵箱中的郵件按照時間排序……總之很多東西都需要排序,可以說排序是無處不在。現在我們舉個具體的例子來介紹一下 【啊哈!演算法】演算法1:最快最簡單的排序——桶排序《啊哈C》出版之後,很多網友希望能夠有加深的內容,比如資料結構、演算法之類的。今後每週五更新一篇吧。最快最簡單的排序——桶排序 在我們生活的這個世界中到處都是被排序過的。站隊的時候會按照身高排序,考試的名次需要按照分數排序,網上購物的時候會按照價格排序,電子郵箱中的郵件按照 【演算法】最快最簡單的排序——桶排序在我們生活的這個世界中到處都是被排序過的。站隊的時候會按照身高排序,考試的名次需要按照分數排序,網上購物的時候會按照價格排序,電子郵箱中的郵件按照時間排序……總之很多東西都需要排序,可以說排序是無處不在。現在我們舉個具體的例子來介紹一下排序演算法。 首先出場的我們的主人 最快最簡單的排序——桶排序在我們生活的這個世界中到處都是被排序過的。站隊的時候會按照身高排序,考試的名次需要按照分數排序,網上購物的時候會按照價格排序,電子郵箱中的郵件按照時間排序……總之很多東西都需要排序,可以說排序是無處不在。現在我們舉個具體的例子來介紹一下排序演算法。 leetcode算法題3:分組,讓每個組的最小者,相加之後和最大。想知道桶排序是怎麽樣的嗎?get ons 表示 note stdlib.h 不為 ask include tor /* Given an array of 2n integers, your task is to group these integers into n pairs of intege 最快最簡單的部署本地Apache+PHP+MySQL神器USBWebserver(轉)包含 .com col 最快最簡單 dmi 分享圖片 admin 目錄 www. 搭建本地服務器環境的軟件有很多,比如什麽PHPNOW、Almp、XAMPP等等好多;<br> 之前分享過一個《網站本地搭建PHP+Mysql環境運行網站教程》用是PHPno 24.C語言最全排序方法小結(不斷更新)http 希爾 找到 sin -s arr span 計算機 gpo 希爾排序: 該方法的基本思想是:先將整個待排元素序列切割成若幹個子序列(由相隔某個“增量”的元素組成的)分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序(增量足夠小)時,再對全 【最全】經典排序算法(C語言)排好序 而不是 lock wap 循環 而且 -s 關鍵字 void 本文章包括所有基本排序算法(和其中一些算法的改進算法): 直接插入排序、希爾排序、直接選擇排序、堆排序、冒泡排序、快速排序、歸並排序、基數排序。 算法復雜度比較: 算法分類 一、直接插入排序 一個 這可能是最透徹的氣泡排序演算法解析(java實現)氣泡排序是一種思想簡單,便於理解和實現的排序演算法,也許是很多人學習的第一個排序演算法,廢話不多說,我們來實現它 演算法詳解 我們以升序排列為例,演算法的思想是,遍歷整個陣列,依次對陣列中的每兩個數進行比較大小,通過兩個數字的交換,達到將最大的元素移動到陣列的最 簡單的桶排序(個人練習演算法)這個桶排序只是一個10以內的整數的排序,屬於一個比較簡單的。只是作為個人學習演算法的練習,在此分享出來,請指教! C程式碼: #include <stdio.h> /* *描述:桶排序 |