用选择排序法 从大到小输出10个整数
-
int main() {
int a[10], *p = a;注意:如果不设置数组值设置指针变量就会出错,如*a,而不指定数组的大小 ,这是因为指针变量arr没有确定的值,谈不上指向那个变量,所以指针变量指向数组元素地址的时候,要定义该数组的大小。
-
选择排序法
是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。如图:
参考:知乎《C语言十大排序算法,让老师对你刮目相看的技巧》https://zhuanlan.zhihu.com/p/102420855?utm_source=qq&utm_medium=social&utm_oi=1180124150809792512
代码:
#include <stdio.h>
void sort(int arr[], int n); //函数声明
int main() {
int a[10], *p = a; //注意:如果不设置数组值设置指针变量就会出错,如*a,而不指定数组的大小
// 这是因为指针变量arr没有确定的值,谈不上指向那个变量
printf("请随机输入十个数");
for (int i = 0; i < 10; i++) {
scanf("%d", p++);
}
p = a; //p重新指向a的首地址
sort(a,10);
for (p = a; p < a + 10; p++) {
printf("%d", *p);
}
return 0;
}
void sort(int arr[], int n) { //形参是数组名
int temp;
for (int i = 0; i < n - 1; i++) { //n-1去除了j还剩下n-1
for (int j = i + 1; j < n; j++) {
if (arr[j] > arr[i]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
被调函数有两种写法:
方法1:形参是数组名
void sort(int arr[], int n) { //形参是数组名
int temp;
for (int i = 0; i < n - 1; i++) { //n-1去除了j还剩下n-1
for (int j = i + 1; j < n; j++) {
if (arr[j] > arr[i]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
方法2:形参是指针变量
void sort(int *arr,int n){ //形参是指针变量*arr
int t;
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (*(arr+j)>*(arr + i)) { //如果第j个元素比第i个元素大,就交换位置
t =*(arr+i);
*(arr+i) = *(arr+j);
*(arr+j) = t;
}
}
}
}