题目:
对一个数组进行从小到大排序或者从大到小排序
思路:
有两种方式1.找最小的元素排序 2.找最大的元素排序。这两种方法基本类似,此次编辑采用找最小元素的方法排序。
利用循环来区分已经排序的区间和待排序区间,再利用一个循环来进行每一趟的排序工作。
此次编辑还用到了交换变量的函数,要注意此处要采用取地址的方法,因为形参和实参是两个不同的参数概念。
编辑如下所示:
#include<stdio.h>
#include<stdlib.h>
void swap(int* x, int* y){
int tmp = *x;
*x = *y;
*y = tmp;
}
void bubble_sort(int *arr, int size){
//有两种方式1.找最小的排序 2.找最大的排序
//这里用找最小的排序方法
//[0,bound)这是已排序区间
//[bound,0)待排序区间
for (int bound = 0; bound < size; bound++){
//此时作用是找到一个比较小的值,并放到合适的位置
for (int cur = size - 1; cur>bound; cur–){
//此时作用是完成一趟查找中查找最小的过程
if (arr[cur-1] > arr[cur]){
//此处为升序排序
//意思是如果前一个元素比后一个元素大,说明不符合要求,那就交换这俩元素
swap(&arr[cur - 1], &arr[cur]);
}
}
}
}
int main(){
int arr[5] = { 4, 5, 6, 9, 8 };
int size = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr, size);
for (int i = 0; i < size; i++){
printf("%d “, arr[i]);
}printf(”\n");
system(“pause”);
}
运行结果如下图所示: