日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ 计数排序

發布時間:2024/4/18 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ 计数排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

計數排序的原理:

(1)首先,找出最大的元素,給“count[ ]”申請“最大元素的下標+1”個單元(因為數組下標是從0開始的,所以要+1);

(2)然后,統計每個元素出現的次數,把次數存到“count[ ]”里;

(3)最后,通過一個元素出現的次數-1,從而算出正確順序的位置,再把元素放進去,就有順序了。

? 因為不知道范圍的大小,所以需要申請內存,如果知道范圍的大小,就可以直接聲明。
?


#include <iostream>

#include <stdlib.h>

using namespace std;

?

/**********************************************/

/* ?計數排序

/*********************************************/

?

void CountingSort(int array[], int n)

{

?? ?int i;

?? ?int largest = array[0]; ?//設最初最大元素默認是array[0]

?? ?int *temp = new int[n]; ?//申請一個n個int元素的數組內存

?

?? ?for (i = 1; i < n; i++)

?? ?{

?? ??? ?if (largest < array[i]) ?//找出最大元素

?? ??? ?{

?? ??? ??? ?largest = array[i];

?? ??? ?}

?? ?}

?

?? ?int *count = new int[largest + 1]; ?//申請一個[largest+1]個int元素的數組內存

?? ?for (i = 0; i <= largest; i++)

?? ?{

?? ??? ?count[i] = 0; ?//初始化

?? ?}

?

?? ?for (i = 0; i < n; i++)

?? ?{

?? ??? ?count[array[i]]++; ?//計算array數組每個元素出現的次數

?? ?}

?

?? ?for (i = 1; i <= largest; i++)

?? ?{

?? ??? ?count[i] = count[i - 1] + count[i]; ?//count數組元素出現次數的累加

?? ?}

?

?? ?for (i = n - 1; i >= 0; i--)

?? ?{

?? ??? ?temp[count[array[i]] - 1] = array[i]; ?//將array[]數組的元素賦給已經排好位置的temp[]數組

?? ??? ?count[array[i]]--; ?//數組元素的總次數減少

?? ?}

?

?? ?for (i = 0; i < n; i++)

?? ?{

?? ??? ?array[i] = temp[i]; ?//將排好順序的元素賦給array[]數組

?? ?}

?

?? ?delete[] count; ?//釋放內存

?? ?count = NULL;

?? ?delete[] temp; ?//釋放內存

?? ?temp = NULL;

}

?

?

int main(void) ?//主程序

{

?? ?const int n = 6; ?//數組元素的數量

?? ?int array[n];

?? ?cout << "請輸入6個整數:" << endl;

?? ?for (int i = 0; i < n; i++)

?? ?{

?? ??? ?cin >> array[i];

?? ?}

?

?? ?cout << endl; ?//換行

?

?? ?CountingSort(array, n); ?// 調用CountingSort函數 ?進行排序

?

?? ?cout << "由小到大的順序排列后:" << endl;

?? ?for (int i = 0; i < n; i++)

?? ?{

?? ??? ?cout << "Array" << "[" << i << "]" << " = " << array[i] << endl;

?? ?}

?

?? ?cout << endl << endl; ?//換行

?

?? ?system("pause"); ?//調試時,黑窗口不會閃退,一直保持

?? ?return 0;

}
?

總結

以上是生活随笔為你收集整理的C++ 计数排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。