冒泡排序
#include <stdio.h>
// 遍历数组
void printArr(int array[], int length);
// 冒泡排序
void bubbleSort(int array[], int length);
int main(void) {
/*
* 冒泡排序:
* 1、相邻的数据两两比较,小的放前面,大的放后面
* 2、第一轮比较完毕之后,最大值就已经确定,第二轮可以少循环一次,后面以此类推
* 3、如果数组中有n个数据,总共执行n-1轮的代码就可以了
* */
int arr[] = {3, 5, 2, 1, 4};
int len = sizeof(arr) / sizeof(arr[0]);
printArr(arr, len);
bubbleSort(arr, len);
printArr(arr, len);
return 0;
}
void printArr(int array[], int length) {
for (int i = 0; i < length; i++) {
printf("%d ", array[i]);
}
printf("\n");
}
void bubbleSort(int array[], int length) {
// 外循环:把内循环执行了(length - 1)次
for (int i = 0; i < length - 1; i++) {
// 内循环:找到本次循环的最大值,并把它放到右边
for (int j = 0; j < length - 1 - i; j++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
选择排序
#include <stdio.h>
// 遍历数组
void printArr(int array[], int length);
// 选择排序
void selectionSort(int array[], int length);
int main(void) {
/*
* 选择排序:
* 从0索引开始,拿着每一个索引上的元素跟后面的元素依次比较,
* 小的放前面,大的放后面,以此类推
* */
int arr[] = {3, 5, 2, 1, 4};
int len = sizeof(arr) / sizeof(arr[0]);
printArr(arr, len);
selectionSort(arr, len);
printArr(arr, len);
return 0;
}
void printArr(int array[], int length) {
for (int i = 0; i < length; i++) {
printf("%d ", array[i]);
}
printf("\n");
}
void selectionSort(int array[], int length) {
for (int i = 0; i < length - 1; i++) {
for (int j = i + 1; j < length; j++) {
if (array[i] > array[j]) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
}