桶排序

    xiaoxiao2025-04-22  17

    桶排序

    这里其实并不是将数字填入到数组中,只是在数组值上不断++。

    #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <limits> #include <algorithm> #include <time.h> #define MAX 20 using namespace std; void bucketSort(int arr[],int len) { if (arr == NULL || len < 2) { return; } int Max = INT_MIN; for (int i = 0; i < len; i++) { Max = max(Max, arr[i]); //找出数组中的最大值 } int* bucket = new int[Max + 1];//准备桶 for (int i = 0; i < Max + 1;++i)//开辟空间记得初始化 { bucket[i] = 0; } //用下面初始化错误,memset只初始化了len大小的空间 // memset(bucket,0,Max+1); // for (int i = 0; i < Max + 1;++i) // { // cout << bucket[i] << ""; // } //只要出现过该数字n,在bucket[n]上就会+1 for (int i = 0; i < len; i++) { bucket[arr[i]] = bucket[arr[i]] + 1; //bucket[arr[i]]++;上下是一个作用,但是不能写成bucket[arr[i]] = + 1; } for (int i = 0; i < Max+1;++i) { cout << bucket[i] << " ";//查看每个桶中的数量 } cout << endl; int i = 0; for (int j = 0; j <Max+1; j++) { while (bucket[j]-- > 0) { arr[i++] = j; } } } int main(void) { srand((unsigned int)time(NULL)); int arr[MAX]; for (int i = 0; i < MAX; ++i) { int num = rand() % 100; arr[i] = num; } for (int i = 0; i < MAX; ++i) { cout << arr[i] << " "; } cout << endl; bucketSort(arr, MAX); for (int i = 0; i < MAX; ++i) { cout << arr[i] << " "; } system("pause"); return 0; }
    最新回复(0)