#include <stdio.h>
void main()
{
int data[4] = {1, 4, 3, 2};
int i, min;
min = 1;
for (i=1; i<4; i++)
if (data[i]<data[min])
min = i;
printf("min=%d data[%d]=%d\n", min, min, data[min]);
}
#include <stdio.h>
void swap(int *ptrX, int *ptrY);
void main()
{
int data[4] = {1, 4, 3, 2};
int i, j, min;
for (j=0; j<4-1; j++)
{
min = j;
for (i=j+1; i<4; i++)
if (data[i]<data[min])
min = i;
swap(&data[j], &data[min]);
}
for (i=0; i<4; i++)
printf("data[%d]=%d\n", i, data[i]);
}
void swap(int *ptrX, int *ptrY)
{
int tmp;
tmp = *ptrX;
*ptrX = *ptrY;
*ptrY = tmp;
}
#include <stdio.h>
void swap(int *ptrX, int *ptrY);
void selectionSort(int n, int data[], int iStart);
void main()
{
int data[] = {1, 4, 3, 2, 8, -5};
int i;
selectionSort(6, data, 2);
for (i=0; i<6; i++)
printf("data[%d]=%d\n", i, data[i]);
}
void selectionSort(int n, int data[], int iStart)
{
int i, j, min;
for (j=iStart; j<n-1; j++)
{
min = j;
for (i=j+1; i<n; i++)
if (data[i]<data[min])
min = i;
swap(&data[j], &data[min]);
}
}
void swap(int *ptrX, int *ptrY)
{
int tmp;
tmp = *ptrX;
*ptrX = *ptrY;
*ptrY = tmp;
}
#include <stdio.h>
void swap(int *ptrX, int *ptrY);
void selectionSort(int n, int data[], int iStart);
int findNextLarger(int iPivot, int n, int data[]);
void printPerm(int n, int data[]);
void main()
{
int data[] = {1, 2, 3, 4, 5};
int n=5;
int iPivot, iSel;
printPerm(n, data);
while (1)
{
iPivot = n-2;
iSel = 0;
do
{
if (iSel < 0)
{
iPivot--;
if (iPivot < 0)
return;
}
iSel = findNextLarger(iPivot, n, data);
}
while (iSel < 0);
swap(&data[iSel], &data[iPivot]);
selectionSort(n, data, iPivot+1);
printPerm(n, data);
}
}
void printPerm(int n, int data[])
{
int i;
for (i=0; i<n; i++)
printf("%d ", data[i]);
printf("\n");
}
void selectionSort(int n, int data[], int iStart)
{
int i, j, min;
for (j=iStart; j<n-1; j++)
{
min = j;
for (i=j+1; i<n; i++)
if (data[i]<data[min])
min = i;
swap(&data[j], &data[min]);
}
}
void swap(int *ptrX, int *ptrY)
{
int tmp;
tmp = *ptrX;
*ptrX = *ptrY;
*ptrY = tmp;
}
int findNextLarger(int iPivot, int n, int data[])
{
int i, min;
min = -1;
for (i=iPivot+1; i<n; i++)
if (data[i]>data[iPivot])
{
min = i;
break;
}
if (min == -1)
return -1;
for (i=min+1; i<n; i++)
if ((data[i]>data[iPivot])&&(data[i]<data[min]))
min = i;
return min;
}
請將下列程式中讀取資料部份程式改在函式中執行
#include <stdio.h>
#define MAXSIZE 100
int main()
{
int nTotal, nMinPick, nMaxPick;
int dataArray[5];
int i;
printf("Please input total number of chips(ex. 15): ");
scanf("%d", &nTotal);
if (nTotal>MAXSIZE)
{
printf("sorry, maximum is %d!!\n", MAXSIZE);
return 1;
}
printf("Please input minimum number of each pick(ex. 2): ");
scanf("%d", &nMinPick);
if (nMinPick<0)
{
printf("sorry, minimum is 0!!\n");
return 1;
}
if (nMinPick>nTotal-1)
{
printf("sorry, maximum is %d\n", nTotal-1);
return 1;
}
printf("Please input maximum number of each pick(ex. 5): ");
scanf("%d", &nMaxPick);
if (nMaxPick<=nMinPick)
{
printf("sorry, minimum is %d\n", nMinPick+1);
return 1;
}
if (nMaxPick>nTotal)
{
printf("sorry, maximum is %d\n", nTotal);
return 1;
}
printf("Please input 5 random numbers : ");
for (i=0; i<5; i++)
scanf("%d", &dataArray[i]);
printf("nTotal = %d\n", nTotal);
printf("nMinPick = %d\n", nMinPick);
printf("nMaxPick = %d\n", nMaxPick);
for (i=0; i<5; i++)
printf("dataArray[%d]=%d\n", i, dataArray[i]);
return 0;
}
主程式會改為
int main()
{
int nTotal, nMinPick, nMaxPick;
int dataArray[5];
readParam(&nTotal, &nMinPick, &MaxPick, dataArray);
printf("nTotal = %d\n", nTotal);
printf("nMinPick = %d\n", nMinPick);
printf("nMaxPick = %d\n", nMaxPick);
for (i=0; i<5; i++)
printf("dataArray[%d]=%d\n", i, dataArray[i]);
}
#include <stdio.h>
void main()
{
int x, y;
x = 10;
y = 20;
printf("Before swap x=%d y=%d\n", x, y);
swap(&x, &y);
printf("After swap x=%d y=%d\n", x, y);
}
void swap(int *ptrX, int *ptrY)
{
int tmp;
tmp = *ptrX;
*ptrX = *ptrY;
*ptrY = tmp;
}
#include <stdio.h>
#define MAXSIZE 100
void readParam(int *ptrNTotal, int *ptrNMinPick,
int *ptrNMaxPick, int dataArray[]);
int main()
{
int nTotal, nMinPick, nMaxPick;
int dataArray[5];
int i;
readParam(&nTotal, &nMinPick, &nMaxPick, dataArray);
printf("nTotal = %d\n", nTotal);
printf("nMinPick = %d\n", nMinPick);
printf("nMaxPick = %d\n", nMaxPick);
for (i=0; i<5; i++)
printf("dataArray[%d]=%d\n", i, dataArray[i]);
return 0;
}
void readParam(int *ptrNTotal, int *ptrNMinPick,
int *ptrNMaxPick, int dataArray[])
{
int i;
printf("Please input total number of chips(ex. 15): ");
scanf("%d", ptrNTotal);
if (*ptrNTotal>MAXSIZE)
{
printf("sorry, maximum is %d!!\n", MAXSIZE);
return;
}
printf("Please input minimum number of each pick(ex. 2): ");
scanf("%d", ptrNMinPick);
if (*ptrNMinPick<0)
{
printf("sorry, minimum is 0!!\n");
return;
}
if (*ptrNMinPick>*ptrNTotal-1)
{
printf("sorry, maximum is %d\n", *ptrNTotal-1);
return;
}
printf("Please input maximum number of each pick(ex. 5): ");
scanf("%d", ptrNMaxPick);
if (*ptrNMaxPick<=*ptrNMinPick)
{
printf("sorry, minimum is %d\n", *ptrNMinPick+1);
return;
}
if (*ptrNMaxPick>*ptrNTotal)
{
printf("sorry, maximum is %d\n", *ptrNTotal);
return;
}
printf("Please input 5 random numbers : ");
for (i=0; i<5; i++)
scanf("%d", &dataArray[i]);
return;
}