编写函数,使用指针实现数组冒泡排序
时间: 2023-07-20 12:05:21 浏览: 55
下面是使用指针实现数组冒泡排序的 C++ 代码:
```cpp
void bubbleSort(int *arr, int size) {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - 1 - i; j++) {
if (*(arr + j) > *(arr + j + 1)) {
int temp = *(arr + j);
*(arr + j) = *(arr + j + 1);
*(arr + j + 1) = temp;
}
}
}
}
```
这个函数接收一个整数数组和数组大小作为参数。在函数内部,我们使用两个循环来遍历数组并比较相邻的元素。如果前一个元素大于后一个元素,则交换它们。由于我们使用指针来访问数组元素,因此将 arr + j 解引用得到第 j 个元素。
相关问题
用指针编写一个对整型数组进行冒泡排序的函数,并在主函数中对数组进行输入和输出
好的!这是一个简单的冒泡排序的实现,希望能满足您的需求:
```c++
#include <stdio.h>
void bubble_sort(int* arr, int len) {
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main() {
int arr[] = { 5, 4, 3, 2, 1 };
int len = sizeof(arr) / sizeof(arr[0]);
printf("Before sorting: ");
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
bubble_sort(arr, len);
printf("\nAfter sorting: ");
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
在这个程序中,我们定义了一个 `bubble_sort` 函数,它接收一个整型数组和数组长度作为参数,并使用冒泡排序算法对数组进行排序。在 `main` 函数中,我们声明了一个整型数组,并将其输入到 `bubble_sort` 函数中进行排序。最后,我们输出排序后的数组。
通过下面题目,掌握数组做函数参数、指针指向数组、冒泡排序、 选择法排序等内容 编写排序函数void selectsort(int*array,intn),它的功能是利用选择法实现数组元素 大到小的排序;voidbubblesort(int*array,intn),它的功能是利用冒泡法实现数组元 素从小到大的排序。 在main函数中定义数组(长度自定),用scanf进行数组的初始化,然后调用selectSort函数进行 从大到小排序,再使用bubbleSort函数重新进行从小到大的排序,最后将排好序的数组打印输出
好的,我会尽力回答你的问题。以下是针对你的问题的代码和注释:
```c
#include <stdio.h>
// 选择排序函数
void selectSort(int* array, int n) {
int i, j, maxIndex, temp;
// 只需要排序前n-1个元素,最后一个元素自然就排好序了
for (i = 0; i < n - 1; i++) {
// 假设当前i处的元素是未排序部分的最大值
maxIndex = i;
// 在未排序部分中找到最大值的下标
for (j = i + 1; j < n; j++) {
if (array[j] > array[maxIndex]) {
maxIndex = j;
}
}
// 如果未排序部分的最大值不在i处,那么交换i处和最大值处的元素
if (maxIndex != i) {
temp = array[i];
array[i] = array[maxIndex];
array[maxIndex] = temp;
}
}
}
// 冒泡排序函数
void bubbleSort(int* array, int n) {
int i, j, temp;
// 外层循环控制每次排序需要比较的元素个数
for (i = 0; i < n - 1; i++) {
// 内层循环控制每次比较相邻元素的大小
for (j = 0; j < n - 1 - i; j++) {
if (array[j] > array[j + 1]) {
// 如果前一个元素比后一个元素大,就交换它们的位置
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
int main() {
int n, i;
printf("请输入数组的长度:");
scanf("%d", &n);
int array[n];
printf("请输入%d个整数:", n);
for (i = 0; i < n; i++) {
scanf("%d", &array[i]);
}
// 选择排序实现从大到小排序
selectSort(array, n);
printf("从大到小排序后的数组为:");
for (i = 0; i < n; i++) {
printf("%d ", array[i]);
}
printf("\n");
// 冒泡排序实现从小到大排序
bubbleSort(array, n);
printf("从小到大排序后的数组为:");
for (i = 0; i < n; i++) {
printf("%d ", array[i]);
}
printf("\n");
return 0;
}
```
希望这个代码可以帮助你理解数组做函数参数、指针指向数组、冒泡排序、选择法排序等内容。如果你有任何疑问,欢迎随时向我提问!