117 lines
2.7 KiB
Plaintext
117 lines
2.7 KiB
Plaintext
|
/* file name: mergeSort.c*/
|
|||
|
/* <20>X<EFBFBD>ֱƧ<D6B1> */
|
|||
|
|
|||
|
#include <stdio.h>
|
|||
|
#include <stdlib.h>
|
|||
|
void selectionSort(int[], int);
|
|||
|
void mergeSort(int[], int[], int[], int, int);
|
|||
|
void flushBuffer(void);
|
|||
|
void printDashLine(void);
|
|||
|
|
|||
|
int main()
|
|||
|
{
|
|||
|
int data1[10], data2[10], data3[20];
|
|||
|
int size1 = 0, size2 = 0, i;
|
|||
|
|
|||
|
printf("\n<>п<EFBFBD><D0BF>Jdata1<61>}<7D>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD>J 0 <20><><EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD>): ");
|
|||
|
/* <20>n<EFBFBD>D<EFBFBD><44><EFBFBD>J<EFBFBD>Ʀr<C6A6><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>J<EFBFBD>Ʀr<C6A6><72> 0 */
|
|||
|
do {
|
|||
|
scanf("%d", &data1[size1]);
|
|||
|
} while(data1[size1++] != 0);
|
|||
|
flushBuffer();
|
|||
|
printf("<22><><EFBFBD>ƧǪ<C6A7><C7AA><EFBFBD><EFBFBD><EFBFBD> : ");
|
|||
|
for (i = 0; i < size1-1; i++)
|
|||
|
printf("%d ", data1[i]);
|
|||
|
printf("\n");
|
|||
|
|
|||
|
printf("\n<>п<EFBFBD><D0BF>Jdata2<61>}<7D>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD>J 0 <20><><EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD>): ");
|
|||
|
/* <20>n<EFBFBD>D<EFBFBD><44><EFBFBD>J<EFBFBD>Ʀr<C6A6><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>J<EFBFBD>Ʀr<C6A6><72> 0 */
|
|||
|
do {
|
|||
|
scanf("%d", &data2[size2]);
|
|||
|
} while(data2[size2++] != 0);
|
|||
|
flushBuffer();
|
|||
|
printf("<22><><EFBFBD>ƧǪ<C6A7><C7AA><EFBFBD><EFBFBD><EFBFBD> : ");
|
|||
|
for (i = 0; i < size2-1; i++)
|
|||
|
printf("%d ", data2[i]);
|
|||
|
printf("\n");
|
|||
|
|
|||
|
/* <20><><EFBFBD>ϥο<CFA5><CEBF>ܱƧDZN<C7B1><4E><EFBFBD>ƦC<C6A6>ƧǡA<C7A1>A<EFBFBD>@<40>X<EFBFBD><58> */
|
|||
|
selectionSort(data1, --size1);
|
|||
|
selectionSort(data2, --size2);
|
|||
|
|
|||
|
printDashLine();
|
|||
|
/* <20>L<EFBFBD>X<EFBFBD>o<EFBFBD><6F><EFBFBD>Ӱ}<7D>C<EFBFBD>A<EFBFBD><41><EFBFBD>O<EFBFBD>Ƨǫ᪺<C7AB><E1AABA><EFBFBD><EFBFBD> */
|
|||
|
printf("<22>Q<EFBFBD>ο<EFBFBD><CEBF>ܱƧǫ᪺<C7AB><E1AABA><EFBFBD>Ʀp<C6A6>U: \n");
|
|||
|
printf("Data1 : ");
|
|||
|
for(i = 0; i < size1; i++)
|
|||
|
printf("%d ", data1[i]);
|
|||
|
printf("\n");
|
|||
|
|
|||
|
printf("Data2 : ");
|
|||
|
for(i = 0; i < size2; i++)
|
|||
|
printf("%d ", data2[i]);
|
|||
|
printf("\n");
|
|||
|
printDashLine();
|
|||
|
|
|||
|
mergeSort(data1, data2, data3, size1, size2);
|
|||
|
printDashLine();
|
|||
|
|
|||
|
printf("<22>Ѥp<D1A4>ܤj<DCA4>Ƨǫ᪺<C7AB><E1AABA><EFBFBD><EFBFBD>: ");
|
|||
|
for (i = 0; i < size1+size2; i++)
|
|||
|
printf("%d ", data3[i]);
|
|||
|
printf("\n");
|
|||
|
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
void selectionSort(int data[], int size)
|
|||
|
{
|
|||
|
int base, compare, min, temp;
|
|||
|
for (base = 0; base < size-1; base++) {
|
|||
|
min = base;
|
|||
|
for (compare = base+1; compare < size; compare++)
|
|||
|
if (data[compare] < data[min])
|
|||
|
min = compare;
|
|||
|
temp = data[min];
|
|||
|
data[min] = data[base];
|
|||
|
data[base] = temp;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void mergeSort(int data1[], int data2[], int data3[], int size1, int size2)
|
|||
|
{
|
|||
|
int arg1, arg2, arg3, i;
|
|||
|
data1[size1] = 32767;
|
|||
|
data2[size2] = 32767;
|
|||
|
arg1 = 0;
|
|||
|
arg2 = 0;
|
|||
|
for (arg3 = 0; arg3 < size1+size2; arg3++) {
|
|||
|
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƦC<C6A6>A<EFBFBD><41><EFBFBD>Ƥp<C6A4><70><EFBFBD><EFBFBD><EFBFBD>s<EFBFBD><73><EFBFBD>X<EFBFBD>᪺֫<D6AB>ƦC */
|
|||
|
if (data1[arg1] < data2[arg2]) {
|
|||
|
data3[arg3] = data1[arg1];
|
|||
|
arg1++;
|
|||
|
}
|
|||
|
else {
|
|||
|
data3[arg3] = data2[arg2];
|
|||
|
arg2++;
|
|||
|
}
|
|||
|
printf("#%2d Step: ", arg3+1);
|
|||
|
for (i = 0; i < arg3+1; i++)
|
|||
|
printf("%d ", data3[i]);
|
|||
|
printf("\n");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void flushBuffer()
|
|||
|
{
|
|||
|
while (getchar() != '\n')
|
|||
|
continue;
|
|||
|
}
|
|||
|
|
|||
|
void printDashLine()
|
|||
|
{
|
|||
|
for(int i = 0; i < 48; i++)
|
|||
|
printf("-");
|
|||
|
printf("\n");
|
|||
|
}
|