海量编程文章、技术教程与实战案例

网站首页 > 技术文章 正文

在嵌入式用C实现一个数组随机排序

yimeika 2025-06-25 20:21:26 技术文章 1 ℃

在某些应用场景中,可能需要将一个数组的元素重新随机排列,我们可以称之为洗牌算法。其原理并不复杂,就是需要遍历整个数组,如果数组有n个元素,每当遍历到第 i个数组元素时(i为数组元素的索引),再从 0 到 n-1 随机生成一个数字记为index,再把索引为 i 和 index 的两个数组元素进行互换,直至遍历结束。这样就完成了数组的随机排序。

举个例子说明,把一个含10个元素的数组array[10]重新随机排序,C代码如下:

uint8_t	num = 10;
uint8_t array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 
void array_shuffle(uint32_t seed)
{
    uint8_t i, index, value;
    uint32_t  tmp_seed;
    
    tmp_seed = seed;
    
    for(i=0; i<10; i++)
    {
        tmp_seed = tmp_seed * 1103515245 + 12345;
        index = (uint8_t)((tmp_seed >> 16)%(num - i) + i);
        value = array[i];
        array[i] = array[index];
        array[index] = value;
  }
}

其中参数seed是随机数种子,使用相同的随机数种子可以得到相同的数组随机排序。

当seed = 102的话,重新排序后 array[10] = {2, 1, 8, 5, 10, 3, 7, 6, 9, 4};

当seed = 105的话,重新排序后 array[10] = {7, 5, 9, 2, 8, 10, 1, 4, 3, 6};

如果还有什么好的方法

,欢迎一起讨论。

Tags:

最近发表
标签列表