归并排序
#思路分为三个函数快
- void swap(int *a, int *b)
- void function(int arr[], int head, int tail)
- void fun(int arr[], int head, int tail)
- 构思主函数
int main()
{
int arr[10] = {-1, 9, 8, 7, 6, 5, 4, 3, 2, 1};
px(arr, 1, 9), cout << "排序后:";
for (int i = 1; i <= 9; i++)
cout << arr[i] << ' ';
putchar(10);
system("pause");
return 0;
}
- 递归将数组分为一半一半…
void function(int arr[], int head, int tail)
{
int mid;
mid = (head + tail) / 2;
if ((head + 1) == tail)
{
if (arr[head] > arr[tail])
swap(&arr[head], &arr[tail]);
return 0;
}
else if (head == tail)
return 0;
px(arr, head, mid);
px(arr, mid + 1, tail);
//fun(arr, head, tail);
return 0;
}
- 合并数组快
void fun(int arr[], int head, int tail)
{
int temp[10] = {0};
int i, j, m, r = head;
m = (head + tail) / 2 + 1;
i = head;
j = m;
while (i < m && j <= tail)
{
if (arr[i] >= arr[j])
temp[r++] = arr[j++];
else
temp[r++] = arr[i++];
}
if (i == m && j <= tail)
{
for (int k = j; k <= tail; k++)
temp[r++] = arr[k];
}
if ((j == (tail + 1)) && i < m)
{
for (int k = i; k < m; k++)
temp[r++] = arr[k];
}
if (r == (tail + 1))
for (int k = head; k <= tail; k++)
arr[k] = temp[k];
cout << "归并:";
for (int k = head; k <= tail; k++)
cout
<< temp[k] << ' ';
cout << '\n';
}
编译结果