int* sort(int arr[], int length){
if(length == 1){
return arr;
}
int* temp_pointer;
int lower_length = (length + 1) / 2;
int upper_length = length / 2;
int lower[lower_length];
int upper[upper_length];
temp_pointer = arr;
memcpy(lower, temp_pointer, lower_length * sizeof(arr[0]));
temp_pointer = arr + lower_length;
memcpy(upper, temp_pointer, upper_length * sizeof(arr[0]));
int* m_lower = sort(lower, lower_length);
int* m_upper = sort(upper, upper_length);
int p_lower = 0;
int p_upper = 0;
for(int i = 0; i < length; i++){
if(p_lower < lower_length){
if(p_upper < upper_length){
arr[i] = m_lower[p_lower] < m_upper[p_upper] ? m_lower[p_lower++] : m_upper[p_upper++];
continue;
}
while(i < length){
arr[i++] = m_lower[p_lower++];
}
break;
}
else{
while(i < length){
arr[i++] = m_upper[p_upper++];
}
break;
}
}
delete[] m_lower;
delete[] m_upper;
delete temp_pointer;
return arr;
}
归并排序
最新推荐文章于 2024-08-12 19:32:44 发布