简述用指针的方法,如何进行数组排序
简述用指针的方法,如何进行数组排序
简述用指针的方法,如何进行数组排序
给你贴个示例,用指针进行 冒泡排序:
#include<stdio.h>
// 从后往前冒泡
void sort(int *a, int n)
{
int i,j,t,noswap;
for(i=0;i< n-1; i++)
{
noswap=1;
for(j=n-1;j>i;j--)
if(*(a + j - 1) < *(a + j))
{
t=*(a + j - 1);
*(a + j - 1)= *(a + j);
*(a + j)=t;
noswap=0;
}
if(noswap)
break;
}
}
int main()
{
int n;
printf("Input n:");
scanf("%d", &n);
printf("Input %d numbers:", n);
int a[n];
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
sort(a, n);
printf("Sorting results:");
for (int i = 0; i < n; i++) {
printf("%4d", a[i]);
}
return 0;
}
使用指针的方法可以通过交换数组元素的指针来进行数组排序。下面是一个使用冒泡排序法进行数组排序的示例代码:
#include <stdio.h>
// 定义比较函数,用于比较两个数的大小
int compare(int *a, int *b) {
return *a - *b;
}
int main() {
// 定义一个数组并初始化
int arr[5] = {
5, 4, 3, 2, 1
}
;
// 定义两个指针,分别指向数组的首元素和尾元素
int *p = arr, *q = arr + 4;
// 使用冒泡排序法对数组进行排序
while (p < q) {
for (int *i = p; i < q; i++) {
// 如果当前元素比后面的元素大,则交换两个元素的指针
if (compare(i, i + 1) > 0) {
int *temp = i;
i = i + 1;
i + 1 = temp;
}
}
// 每次循环结束后,尾指针向前移动一个位置
q--;
}
// 输出排序后的数组
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}