2012年7月5日 星期四
Merge Sort
#include <stdio.h>
int tmp[100];
void merge(int *arr, int left, int mid, int right)
{
int i, j, index1, index2;
i = 0;
index1 = left;
index2 = mid+1;
while (index1 <= mid && index2 <= right) {
if (arr[index1] < arr[index2]) {
tmp[i] = arr[index1];
index1++;
}
else {
tmp[i] = arr[index2];
index2++;
}
i++;
}
for (; index2 <= right; i++, index2++)
tmp[i] = arr[index2];
for (; index1 <= mid; i++, index1++)
tmp[i] = arr[index1];
for (i = left, j = 0; i <= right; i++, j++)
arr[i] = tmp[j];
}
void mergeSort(int *arr, int left, int right)
{
if (left < right) {
int mid = (left + right) / 2;
mergeSort(arr, left, mid);
mergeSort(arr, mid+1, right);
merge(arr, left, mid, right);
}
}
int main(void)
{
int num[10] = {1, 289, 4, 5678, 2345, 2323, 1123, -1, 20, 58};
int i;
mergeSort(num, 0, 9);
for (i = 0; i < 10; i++)
printf("%d ", num[i]);
return 0;
}
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言