
Please help~~Array and Pointer
This is my code.
#include <stdio.h>
void Ascending(int Ar[]);
void Descending(int Ar_descending[]);
void Assign_order(int* element1, int* element2);
int main()
{
int i, j, t, k;
int Array[10];
int Ar_Asc_copy[10];
int Ar_Dec_copy [10];
printf("Please enter 10 integers: ");
for(i = 0; i < 10; i++)
{
scanf("%d", &Array[i]); /* &Array[i] == (Array + i) */
}
for(j = 0; j < 10; j++)
{
Ar_Asc_copy[j] = Array[j]; /* Array[j] == *(Array + j) */
}
printf("\n");
Ascending(Ar_Asc_copy);
for (t = 0; t < 10; t++)
{
Ar_Dec_copy[t] = Ar_Asc_copy[t];
}
Descending(Ar_Dec_copy);
printf("Ascending\tOriginal\tDescending\n");
for(k = 0; k < 10; k++)
{
printf("%5d%16d%16d\n", *(Ar_Asc_copy + k), *(Array + k), *(Ar_Dec_copy +
k));
}
return 0;
Quote:
}
void Ascending(int Ar[])
{
int* ptr;
int tmp, count;
ptr = &Ar[1];
for(tmp = 0; tmp<10 ; tmp++ )
{
for(count = 0; count < 9; count++)
{
if(*(Ar + count) > *(ptr + count) )
{
Assign_order((Ar + count), (ptr + count));
}
}
}
Quote:
}
void Assign_order(int* element1, int* element2)
{
int temp;
temp = *element1;
*element1 = *element2;
*element2 = temp;
Quote:
}
void Descending(int Ar_descending[])
{
int d, e;
int De_Ar[10];
int big_number = 9;
for(d = 0; d < 10; d++)
{
*(De_Ar + d) = *(Ar_descending + big_number);
big_number--;
}
for (e = 0; e < 10; e++)
{
*(Ar_descending + e) = *(De_Ar + e);
}
Quote:
}
Quote:
> Hi!
> I tried to write a program which will sort the array into
> ascending and descending order and print the sorted lists
> after I input 10 integers. The program must not change the
> original array or create any other integer arrays.
> I have to use two pointer arrays. The first pointer array is
> rearranged so that it points to the data in ascending sequence.
> The second pointer array is rearranged so that it points to
> the data in descending sequence.
> The out put will look like:
> Ascending Original Descending
> 14 26 57
> 26 14 41
> 33 57 33
> 41 33 26
> 57 41 14
> Here is my code, but I am still confused what I did. I use bubble sort
> in this case. My friend it is easiler to use selection sort. Can any one
> explain the algorithm of sorting? Thank you.
> #include<stdio.h>
> void Asending(int*[], int[], int);
> void Decending(int list[], int current, int last);
> int main(void)
> {
> int array[10];
> int i;
> int numbers;
> int *pAscend[10];
> int *pDescend[10];
> int list=0;
> int current=10;
> int last=0;
> printf("Please enter 10 integers: ");
> for (i = 0; i < 10; i++)
> {
> scanf("%d", &numbers); /* sorry about using scanf again */
> array[i] = numbers;
> pAscend[i] = &array[i];
> pDescend[i] = &array[i];
> }
> printf("\tAscending\t\tOriginal\t\tDecending\n");
> Asending (pAscend, array, current);
> for (i = 0; i < 10; i++)
> {
> printf("\t%d\t\t%d\t\t%d\n", /*Ascend, array[i], Decend*/);
> }
> printf("\n");
> return 0;
> }
> void Asending(int* pAscend[], int **p1, int **p2)
> {
> int *pAscend[] = list;
> int temp;
> printf("%d\n", list);
> for (**p1 = **p2; **p1 < **p2; **p1++)
> if (**p1 < **p2)
> {
> *p1 = &(**p2);
> *p2 = &(**p1);
> }
> for(**p1 = 0; **p1 < 10; **p1++)
> {
> printf("\t\t%d\n", pAscend[walker]);
> }
> return;
> }
> void Decending(int list[], int current, int last)
> {
> int *Decend = list;
> int walker;
> int temp;
> for (walker = last; walker < current; walker++)
> if (list[walker] < list[walker + 1])
> {
> temp = list[walker];
> list[walker] = list[walker + 1];
> list[walker - 1] = temp;
> }
> return;
> }