算法笔记(2)

 数组索引排序法

整理一个数组索引排序法,利用数组索引来排序的一种算法,效率远高于冒泡排序等普通算法。不过它有前提条件:已知数据中的最大元素。

原理:声明一个长度为待排序数组最大元素+1的索引数组,然后遍历待排序数组,将数组值对应索引数组的索引位的值+1。然后再便利索引数组的值得到有序数组。

  • C实现
#include 

int main() {
    // 准备数组
    int arr[] = {13, 23, 4, 67, 34, 6, 17, 35, 41, 0};
    int indexArr[68] = { 0 }; // 声明一个长度为待排序数组最大元素+1的索引数组
    // 遍历待排序数组
    for (int i = 0; i < sizeof(arr) / sizeof(int); i++)
    {
        indexArr[arr[i]]++; // 将数组值对应索引数组的索引位的值+1
    }

    // 再便利索引数组的值得到有序数组
    for (int i = 0; i < 68; i++)
    {
        for (int j = 0; j < indexArr[i]; j++)
        {
            printf("%d,", i);
        }
        
    }
    
    
    return 0;
}
  • js实现
// 准备数组
let arr = [13, 23, 4, 67, 34, 6, 17, 35, 41, 0];
let indexArr = new Array(68); // 声明一个长度为待排序数组最大元素+1的索引数组
// 遍历待排序数组
for (let i = 0; i < arr.length; i++) {
    if (indexArr[arr[i]] === undefined) {
        indexArr[arr[i]] = 0;
    }
    indexArr[arr[i]]++; // 将数组值对应索引数组的索引位的值+1
}

// 再便利索引数组的值得到有序数组
for (let i = 0; i < 68; i++) {
    for (let j = 0; j < indexArr[i]; j++)
    {
        console.log("%d,", i);
    }
    
}

 

你可能感兴趣的:(算法笔记,排序算法,算法,快速排序)