#include"stdio.h"
/*
通过指向指针的指针来排序
即根据指针所指的元素的大小来将指针地址排序
而后依次输出指针地址的时候得到的就是有序的数组
比如3,1的指针地址分别为a和b,即a->3,b->1
交换指针位置后a->1,b->3
对本程序中的ptr指针数组进行了排序
*/
void sort(int **p, int n)
{
int i,j;
int *t;
for(i=0; i<n; i++)
{
for(j=i+1; j<n; j++)
{
if(*p[i] > *p[j])
{
t = p[i];
p[i] = p[j];
p[j] = t;
}
}
}
}
/*
将中间冒泡出来的值取出来通过指针进行替换
这种方式直接通过指针修改到了原来的数组
对本程序中的a数组进行了排序
*/
void sort1(int **p, int n)
{
int i,j;
int temp1;
for(i=0; i<n; i++)
{
for(j=i+1; j<n; j++)
{
if(*p[i] > *p[j])
{
temp1 = *p[i];
*p[i] = *p[j];
*p[j] = temp1;
}
}
}
}
void main()
{
int i;
int n=5;
int *ptr[5];
int a[5] = {0};
printf("input %d numbers:\n", n);
for(i=0; i<n; i++)
{
ptr[i] = &a[i];
scanf("%d", ptr[i]);
}
printf("before sort:\n");
for(i=0; i<n; i++)
{
printf("%d\n", a[i]);
}
//对ptr数组修改的指向指针的排序
sort(ptr, n);
printf("after sort(*ptr[]):\n");
for(i=0; i<n; i++)
{
printf("%d\n", *ptr[i]);
}
printf("after sort(a[]):\n");
for(i=0; i<n; i++)
{
printf("%d\n", a[i]);
}
/*
//对a数组修改的指向指针的排序
sort1(ptr, n);
printf("after sort(*ptr[]):\n");
for(i=0; i<n; i++)
{
printf("%d\n", *ptr[i]);
}
printf("after sort1(a[]):\n");
for(i=0; i<n; i++)
{
printf("%d\n", a[i]);
}
*/
}
分享到:
相关推荐
不仅用指向指针的方法对n个整数排序并输出,而且将排序单独写成一个函数,N个整数在主函数中的输入,最后在主函数中的输出。
在改进后的`bubble_sort`函数中,我们添加了一个参数`int (*comp)(int a, int b)`,它是一个函数指针,接受两个整数并返回一个布尔值。这样,我们可以通过传入不同的比较函数来控制排序的方向。例如,我们定义了一个...
题目“C++习题-超长数列中n个整数排列”旨在通过一个具体的类实现,来探讨如何有效地对数列中的元素进行排序和管理。本解析将深入分析代码示例,提炼关键知识点,并扩展其背后的原理。 #### 关键知识点: 1. **...
接着,我们将使用这个指针数组来存储需要排序的整数。由于数组元素是动态分配的,我们需要使用`new`运算符为每个元素分配内存: ```cpp intPtrArray[0] = new int; *intPtrArray[0] = 5; // 给第一个元素赋值 // .....
例如,如果有一个接受整数参数并返回整数的函数,我们可以这样定义一个指针: ```cpp int (*FunctionPointer)(int); ``` 这里的`FunctionPointer`是一个指针,它指向一个接收`int`类型参数并返回`int`类型的函数。...
其核心思想是通过两个指针`n`和`m`分别指向数组的中间位置和最后一个元素的位置,然后依次交换两个指针所指向的元素值,直到所有元素都被正确地反转。 #### 函数参数解释 - `int *p`: 指向数组的第一个元素的指针。...
例如,`int (*p)[n]` 表示 `p` 是一个指向包含 `n` 个整数的数组的指针,而 `int (*p)()` 表示 `p` 是一个函数指针,该函数返回整型值。解析这种复杂的声明,可以遵循所谓的"右左法则",即从右向左阅读,遇到括号时...
同时,指针数组还可以方便地进行字符串的排序、查找等操作,例如`SortString`函数就是一个例子,它接受一个字符串指针数组和数量,通过比较字符串并交换指针来对字符串进行排序。 总的来说,理解和熟练运用指针数组...
针对"双指针按奇偶排序数组"的问题,我们需要一个包含整数的数组,并按照以下规则重新排列:所有偶数应该排在前面,所有奇数应该排在后面,但保持原有顺序不变(即相对位置)。例如,如果原数组为[1, 2, 3, 4, 5],...
`lParam1`和`lParam2`分别代表正在比较的两个列表项的索引,而`lParamSort`通常是一个指向`CListCtrl`实例的指针,这样函数内部可以访问到列表控件的属性和方法。 在函数体中,首先通过`CListCtrl *pList = ...
- **交换函数**:`void jiaohuan(int *a, int *b)` 这个函数接受两个指向整数的指针作为参数,用于交换它们所指向的整数值。 #### 知识点总结 - **指针传递**:通过传递变量的地址而非值,可以在被调用函数中直接...
1. 请根据上题编写对输入的 a、b、c 三个整数,按大小顺序输出。 2. 如果输入 a、b、c、d 四个整数,按由大到期小的顺序输出,能否编写程序。 答案 1. 使用指针数组来实现三整数的排序。 ```c void swap(int *pt1,...
数组名作为函数参数实例8.5,用选择法对数组中10个整数按从小到大排序。 在sort函数中,形参为指针变量,该变量接收实参数组的首地址,此时形参指针变量a与实参数组a,指向同一片存储空间。用指针引用数组中的元素...
整数奇偶排序,顾名思义,是一种对整数序列进行特定规则的排序方法,主要出现在信息学竞赛中,例如“信息学奥赛一本通-T1181”这个题目。这种排序要求将给定的整数序列按照奇数和偶数的顺序排列,即先排列所有奇数,...
},则可以通过指针变量x和y交换两个整数的值。 六、实例程序 例如,使用指针变量求解两个整数的升序输出: main() { int num1, num2; int *num1_p = &num1, *num2_p = &num2, *pointer; printf("Input the ...
在示例程序中,`sort` 函数接受一个字符指针数组和一个整数作为参数,用于对字符串进行排序。在`main`函数中,`sort`函数被调用,并通过函数指针`void (*sort)(char *a[], int n)`传递。 3. `strcmp`函数:在排序...
qsort函数接受四个参数,其中base指向数组的起始地址,nelem表示数组中元素的数量,width表示数组中每个元素的字节数,pfCompare是一个函数指针,指向用于比较两个元素的函数。这个比较函数必须符合特定的签名,并...
两个指针分别指向两个数组的起始位置,比较当前指针所指元素大小,如果相等,则输出并移动两个指针;如果不相等,则移动较小元素所在数组的指针。这种方法时间复杂度为O(n),空间复杂度为O(1)。 #### 七、求3个数组...
例如,如果你有一个接受两个整数并返回整数的函数,你可以这样定义一个函数指针: ```c int add(int a, int b); typedef int (*AddFunc)(int, int); // 定义一个函数指针类型 AddFunc addPtr = add; // 将add函数的...
- **指针加减整数**:指针加上或减去一个整数的结果是新的地址值,即当前指针所指向位置之后或之前相应数量的数据的地址。 ```cpp int a[4] = {1, 2, 3, 4}; int *p = a, *p1 = p + 3; // p+0、p+1、p+2、p+3...