1、break 作用:用於終止當前循環(跳出循環體)。
遇到最多的應該是在雙層循環體中的使用:
(1)在內循環體中,遇到break,則直接跳出內循環體,再次執行外循環體。
(2) 在外循環體中,break 與 內循環體並行,遇到並跳出外循環體。
注:break 用於switch 語句中,則直接跳出switch
break 不能直接用於if中,除非if屬於循環的一個句子,但此時他的作用是循環,而不是if
參考:
http://blog.csdn.net/wfz0704112/article/details/8550230
http://blog.csdn.net/u010738823/article/details/48896077
2、ctime 頭文件
“時間”和“日期”的概念
Coordinated Universal Time(UTC):
協調世界時,又稱為世界標准時間,也就是大家所熟知的格林威治標准時間(Greenwich Mean Time,GMT).比如,中國內地的時間與UTC的時差為+8,也就是UTC+8.美國是UTC-5
Calendar Time:
日歷時間:是用“從一個標准時間點到此時的時間經過的秒數”來表示的時間.這個標准時間點對不同的編譯器來說會有所不同,但對一個編譯系統來說,這個標准時間點是不變的,該編譯系統中的時間對應的日歷時間都通過該標准時間點來衡量,所以可以說日歷時間是“相對時間”,但是無論你在哪一個時區,在同一時刻對同一個標准時間點來說,日歷時間都是一樣的.epoch:時間點時間點在標准C/C++中是一個整數,它用此時的時間和標准時間點相差的秒數(即日歷時間)來表示
clock tick:
時鐘計時單元(而不把它叫做時鐘滴答次數),一個時鐘計時單元的時間長短是由 CPU 控制的.一個 clock tick 不是CPU 的一個時鐘周期,而是C/C++的一個基本計時單位.
重要的宏
CLOCKS_PER_SEC
說明:每秒鐘的滴答數
定義:
#define CLOCKS_PER_SEC ((clock_t) 000)
用途:它用來表示一秒鐘會有多少個時鐘計時單元
clock_t
說明:滴答計數類型
定義:
#ifndef _CLOCK_T_DEFINED typedef long clock_t; #define _CLOCK_T_DEFINED #endif
注意:其中clock_t是用來保存時間的數據類型
time_t
說明:日歷時間的秒計數
定義:
#ifndef __TIME_T #define __TIME_T //避免重復定義 time_t typedef long time_t; //時間值time_t 為長整型的別名 #endif
注意:對time_t數據類型的值來說,它所表示的時間不能晚於2038年 月 8日 9時 4分07秒.
重要數據類型
struct tm
說明:年月日等得細分時間數據結構
struct tm{ int tm_sec; //Seconds. [0-60] ( leap second) int tm_min; //Minutes. [0-59] int tm_hour; //Hours. [0-23] int tm_mday; //Day. [ -3 ] int tm_mon; //Month. [0- ] int tm_year; //Year - 900. int tm_wday; //Day of week. [0-6] int tm_yday; //Days in year.[0-365] int tm_isdst; //DST. [- /0/ ] #ifdef __USE_BSDlong int tm_gmtoff; //Seconds east of UTC. __const char *tm_zone; //Timezone abbreviation.(時區縮寫) #elselong int __tm_gmtoff; //Seconds east of UTC. __const char *__tm_zone; //Timezone abbreviation. #endif };
函數
clock 函數
原型:clock_t clock( void );
作用:返回本程序自啟動來,流逝的時鐘計時單元.
difftime 函數
原型:double difftime( time_t timer ,time_t timer0 );
作用:返回兩個日歷時間之差timer -timer0;
time 函數
原型:time_t time( time_t *timer );
作用:獲取機子的時間
注意:如果,timer不為空,則同時將返回值賦給timer指向的變量.
mktime 函數
原型:time_t mktime(struct tm *timeptr );
作用:將由年月日時分秒等構成的細分時間轉換為流逝秒數構成的日歷時間.
localtime 函數
原型:struct tm *localtime(const time_t *timer);
作用:將日歷時間轉換為本地細分時間
gmtime函數
原型:struct tm *gmtime( const time_t *timer);
作用:將日歷時間轉換為UTC(世界協調時間)的細分時間
注意:localtime與gmtime,前者比後者多8個小時
asctime函數
原型:char *asctime( const struct tm *timeptr );
作用:將細分時間轉換為簡寫字符串
ctime函數
原型:char *ctime( const time_t *timer );
作用:將日歷時間轉換為簡寫字符串
strftime函數
原型:size_t strftime(char *strDest, size_t maxsize, const char *format, const struct tm *timeptr );
作用:將細分時間按format的格式要求格式化到strDest指向的緩沖區
函數strftime()的操作有些類似於sprintf():識別以百分號(%)開始的格式命令集合,格式化輸出結果放在一個字符串中.格式化命令說明串strDest中各種日期和時間信息的確切表示方法.格式串中的其他字符原樣放進串中.格式命令列在下面,它們是區分大小寫的
%a 星期幾的簡寫
%A 星期幾的全稱
%b 月分的簡寫
%B 月份的全稱
%c 標准的日期的時間串
%C 年份的後兩位數字
%d 十進制表示的每月的第幾天
%D 月/天/年
%e 在兩字符域中,十進制表示的每月的第幾天
%F 年-月-日
%g 年份的後兩位數字,使用基於周的年
%G 年分,使用基於周的年
%h 簡寫的月份名
%H 24小時制的小時
%I 2小時制的小時
%j 十進制表示的每年的第幾天
%m 十進制表示的月份
%M 十時制表示的分鐘數
%n 新行符
%p 本地的AM或PM的等價顯示
%r 2小時的時間
%R 顯示小時和分鐘:hh:mm %S 十進制的秒數
%t 水平制表符 %T 顯示時分秒:hh:mm:ss
%u 每周的第幾天,星期一為第一天 (值從0到6,星期一為0)
%U 第年的第幾周,把星期日做為第一天(值從0到53)
%V 每年的第幾周,使用基於周的年
%w 十進制表示的星期幾(值從0到6,星期天為0)
%W 每年的第幾周,把星期一做為第一天(值從0到53)
%x 標准的日期串
%X 標准的時間串
%y 不帶世紀的十進制年份(值從0到99)
%Y 帶世紀部分的十制年份
%z,%Z 時區名稱,如果不能得到時區名稱則返回空字符.%% 百分號
關系圖
應用
#include <iostream> #include <ctime> using namespace std; //定義宏來計算算法所消耗的時間(毫秒級) // "\" 符號:繼續符。表示本行與下一行連接起來 #define BEGIN_RECODE \ { \ clock_t __temp_begin_time__ ; \ __temp_begin_time = clock(); \ #define END_RECODE(dtime) \ dtime = float(clock() - __temp_begin_time__)/CLOCKS_PER_SEC;\ } int main() { float tim; int i; for (i = 0; i < 100000; i++) { a[i] = int(rand() % 100000); } cout << "10W個數的希爾排序:" << endl; BEGIN_RECORD shellSort2(a, sizeof(a)/sizeof(int)); END_RECORD(tim) cout << "希爾增量序列運行時間:" << tim << "s" << endl; for (i = 0; i < 100000; i++) { a[i] = int(rand() % 100000); } BEGIN_RECORD shellSort(a, sizeof(a)/sizeof(int)); END_RECORD(tim) cout << "Hibbard增量序列運行時間:" << tim << "s" << endl; cin.get(); return 0; }
參考
http://www.cnblogs.com/dongzhuangdian/p/5468608.html
http://www.cnblogs.com/kzloser/archive/2012/07/17/2594773.html
http://www.cnblogs.com/leoin2012/p/3910889.html