国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

每日四個小算法 --- day1

2019-11-08 02:08:03
字體:
來源:轉載
供稿:網友

/*

求解a^b的最后三位數思路:二分法和遞歸的結合使用,只要后三位,所以只留后三位一定是正確的。所以int類型就可以。

*/

將b的數分情況考慮:

當 b == 0時,返回 1

當 b == 1時候, 返回 或者 a <= 1時候返回 a %1000,此時如果 a小于等于1的話

當 b == 2時候, 返回 a*a %1000

當 b 大于等于三時候,分兩種情況

當 b為奇數和b為偶數時候,根據公式 a^b = (a^(b/2))^2進行遞歸

代碼:

int getNumber(int a, int b){	if(b == 0)		return 1;	else if(a <= 1 || b == 1){		return a%1000;	}else if(b == 2){		return a*a%1000;	}else if(b & 0x01 == 1)//此時 b 大于等于 3 且是奇數	{		return((getNumber(getNumber(a, b/2), 2)*a) % 1000); // a^3 = a*a^2	}else{		return ((getNumber(getNumber(a, b/2), 2)) % 1000);	}}二馬桶排序

/*	馬桶排序:		特點:數組的下標是該數字,數組的元素是該數字出現的頻率。		可以將待排序的數字看成是馬桶,在里面進行插旗運算。*/void sort(int *score, int n){	int newScore[9] = {0};	int i = 0;	int j = 0;	for(i  = 0; i < 5; i++){		newScore[score[i]]++;	}	for(i = 0; i < 9; i++){		if(newScore[i] != 0){			for(j = 0; j < newScore[i]; j++){//數組元素是數字出現的頻率				PRintf("%d ", i);//下標是真實出現的數字			}		}	}}三冒泡排序

/*		冒泡排序:				5個數字進行排序,第一趟比較這個五個數字,并且比較的時候進行交換。				第一趟選出最小的數字放到最高位。				第二趟從前四個數字選出最小的位置,放到了第四位。				第三趟就是從前三個數字選出最小的,放到了第三位。				第四趟就是.......................,放到了第二位。				外循環控制要遍歷數組的次數,內循環控制比較數組起始位置和比較次數。
時間復雜度: o(n^2)*/void sort(int *a, int n){	int i = 0;	int j = 0;	int temp = 0;	for(i = 0; i < n-1; i++){		for(j = 0; j < n-1-i; j++){			if(a[j] > a[j+1]){				temp = a[j];				a[j] = a[j+1];				a[j+1] =temp;			}		}	}}四:快速排序

/*	快速排序:		首先定義基準變量為temp = a[0];		一次快速排序的過程:首先確定 left < right		然后定義左側的數字為基準數,int temp = a[left];		假設從小到大比較,則基準數左側要小于基準數,基準數右側的數,大于基準數。		首先每次一定要從基數的對面開始,假設J是基數的對面,i是奇數,則如果a[j] >= temp,執行j--		就是找到一個小于基數的,這個數字不應該放在基數的對側,應該放在同側。		然后在基數的同側找一個比基數大的數字,這個數字不應該在基數的同側。		然后進行交換,最后當 i == j 的時候,這個數組已經被遍歷完成,此時將基數放在中間。		對基數左側的數字進行上述過程。		對基數右側的數字進行上述過程。*/void quickSort(int *a, int left, int right){	int temp; //基準數	int t;//交換的時候使用	int i = left;//記錄基數同側的數	int j = right;//記錄基數對側的數	if(left > right)		return;//遞歸結束條件	temp = a[i];//左側是基準值	while(i != j)//進行一次快速排序的過程,結束條件是 i , j	{		//每次先從基準數的對側開始,要就找出小于 基準數的		while(temp <= a[j] && i < j){			j--;		}			while(temp >= a[i] && i < j){			i++;		}		if(i != j){			t = a[i];			a[i] = a[j];			a[j] = t;		}	}	//一次完成后將基數歸位	a[left] = a[i];	a[i] = temp;	quickSort(a, left, i-1);//從基數左側開始排序。	quickSort(a, i+1, right);//從基數右側的開始排序。}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大竹县| 肇庆市| 抚顺县| 共和县| 泾源县| 蓬安县| 扶风县| 大洼县| 瑞安市| 彰化市| 龙井市| 威信县| 简阳市| 射阳县| 伽师县| 新龙县| 扶沟县| 满城县| 祁阳县| 肃北| 苍梧县| 乌兰浩特市| 邹城市| 安康市| 湾仔区| 宝应县| 达拉特旗| 阿鲁科尔沁旗| 岑巩县| 台江县| 和政县| 开平市| 罗江县| 达州市| 鹤壁市| 玛曲县| 山丹县| 林口县| 平阴县| 上蔡县| 莱阳市|