1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
      犧牲空間換時(shí)間的非比較排序之計(jì)數(shù)排序和基數(shù)排序

      非比較排序試用于元素比較集中的序列。

      創(chuàng)新互聯(lián)公司主營(yíng)巴林左旗網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,重慶App定制開發(fā),巴林左旗h5成都小程序開發(fā)搭建,巴林左旗網(wǎng)站營(yíng)銷推廣歡迎巴林左旗等地區(qū)企業(yè)咨詢

      1、計(jì)數(shù)排序

      1. 找出待排序的數(shù)組中最大和最小的元素

      2. 統(tǒng)計(jì)數(shù)組中每個(gè)值為i的元素出現(xiàn)的次數(shù),存入數(shù)組C的第i項(xiàng)

      3. 對(duì)所有的計(jì)數(shù)累加(從C中的第一個(gè)元素開始,每一項(xiàng)和前一項(xiàng)相加)

      4. 反向填充目標(biāo)數(shù)組:將每個(gè)元素i放在新數(shù)組的第C(i)項(xiàng),每放一個(gè)元素就將C(i)減去1

      void CountSort(int *a, int size)
      {
      	assert(a);
      	int max = a[0];
      	int min = a[0];
      	for (int i = 1; i < size; i++)
      	{
      		if (max < a[i])
      			max = a[i];
      		if (min > a[i])
      			min = a[i];
      	}
      	int CountSize = max - min + 1;//該序列的范圍在min~max之間,所以開辟max-min+1
      	int *CountArray = new int[CountSize];
      	memset(CountArray,0,CountSize*sizeof(int));
      	for (int i = 0; i < size; i++)
      	{
      		CountArray[a[i]-min]++;//比如序列在1萬(wàn)到2萬(wàn)之間,那么1萬(wàn)應(yīng)該存在下標(biāo)為0的數(shù)組上
      	}
      	int index = 0;
      	for (int i = 0; i <= CountSize; i++)
      	{
      		int count = CountArray[i];
      		while (count-- > 0)
      		{
      			a[index++] = i+ min;//那么此時(shí)下標(biāo)為0的數(shù),就是1萬(wàn)
      		}
      	}
      }

      2、基數(shù)排序

        基數(shù)排序指的是先把序列中的每個(gè)數(shù)中的個(gè)位排序,然后十位排序,直到超過序列中最大數(shù)的位數(shù)

      void DigitSort(int *a, int size)
      {
      	assert(a);
      	int bit = 1, sum = 10;
      	for (int i = 0; i < size; i++)
      	{
      
      		while (a[i] >= sum)   //取最大數(shù)的位數(shù)
      		{
      			bit++;
      			sum *= 10;
      		}
      	}
      	int digit = 1;
      	int *bucket = new int[size];
      	while (digit <= bit)
      	{
      		int count[10] = { 0 };
      		int position[10] = { 0 };
      		for (int i = 0; i < size; i++)
      		{
      			int numbit = pow(10,digit-1);
      			int bitvalue = (a[i] / numbit) % 10;
      			count[bitvalue]++;  
      		}
      		for (int i = 1; i < 10; i++)
      		{
      			position[i] = position[i - 1] + count[i - 1];
      		}
      		for (int i = 0; i < size; i++)
      		{
      			int numbit = pow(10, digit - 1);
      			int bitvalue = (a[i] / numbit) % 10;
      			bucket[position[bitvalue]++] = a[i];
      		}
      		digit++;      
      		memcpy(a,bucket,size*sizeof(int));
      	}
      }

      犧牲空間換時(shí)間的非比較排序之計(jì)數(shù)排序和基數(shù)排序


      文章名稱:犧牲空間換時(shí)間的非比較排序之計(jì)數(shù)排序和基數(shù)排序
      文章出自:http://ef60e0e.cn/article/ppecpi.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        上饶县| 诸暨市| 清水河县| 桐城市| 南皮县| 宾阳县| 阜阳市| 醴陵市| 黄骅市| 黔江区| 志丹县| 景泰县| 赤城县| 紫阳县| 冕宁县| 绿春县| 呼玛县| 绥芬河市| 大埔区| 南京市| 新乡县| 大关县| 休宁县| 张北县| 通海县| 蓬安县| 平凉市| 志丹县| 山东| 海安县| 康定县| 冷水江市| 通道| 浑源县| 杭州市| 闵行区| 河西区| 洱源县| 伊吾县| 永嘉县| 驻马店市|