c语言数组怎么排序?

有数组定义如下:
 #define ARR_LEN 10
int arr[ARR_LEN] = {12,23,34,45,65,76,8,6,34,5};
将数组中 比 数组平均值小的数据移动到数组的前部分,将数组中 比数组平均值大的数据移动到数组的后部分。

例如上述数组中的平均值为 30.8
移动后,数组中的数据为:
 12   23   8  6  5   34  45  65  76 34


#include <stdio.h>

#define ARR_LEN 10

int main()
{
    int arr[ARR_LEN] = {12, 23, 34, 45, 65, 76, 8, 6, 34, 5};
    float ave = 0;
    for (size_t i = 0; i < ARR_LEN; i++)
    {
        ave += arr[i];
    }
    ave /= ARR_LEN;
    for (size_t i = 0; i < ARR_LEN - 1; i++)
    {
        if (ave < arr[i])
        {
            for (size_t j = i + 1; j < ARR_LEN; j++)
            {
                if (ave > arr[j])
                {
                    int t = arr[j];
                    for (size_t k = j; k > i; k--)
                    {
                        arr[k] = arr[k - 1];
                    }
                    arr[i] = t;
                    break;
                }
            }
        }
    }

    for (size_t i = 0; i < ARR_LEN; i++)
    {
        printf("%d ", arr[i]);
    }

    return 0;
}