首先我们来讲一下三种基本的排序算法——冒泡排序、选择排序和快速排序,并且给出实现的具体代码。
冒泡排序
冒泡排序是一个非常简单的排序算法,其基本思想是比较相邻两个数的大小,如果前一个数比后一个数大,就将两个数交换位置。通过不断重复这个过程,将最大的数“冒泡”到数组的最后面,这个过程类似于水泡在水中不断冒上来,因此得其名。
具体的实现代码如下:
void bubbleSort(int arr[], int n) {
int i, j;
for (i = 0; i < n-1; i++) {
for (j = 0; j < n-i-1; j++) {
if (arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
其中,参数 arr
表示待排序的数组,参数 n
表示数组的大小。我们使用两层循环来遍历所有的元素,对于相邻的两个元素进行比较,如果前一个元素大于后一个元素,则将这两个元素交换位置。
选择排序
选择排序是另一种简单的排序算法,其基本思想是将待排序数组分为已排序和未排序两部分,每次从未排序部分中选择最小的元素,将其加入到已排序部分的末尾。这个过程不断重复,直到所有元素都排序完毕。
具体的实现代码如下:
void selectionSort(int arr[], int n) {
int i, j, min_idx;
for (i = 0; i < n-1; i++) {
min_idx = i;
for (j = i+1; j < n; j++) {
if (arr[j] < arr[min_idx]) {
min_idx = j;
}
}
int temp = arr[i];
arr[i] = arr[min_idx];
arr[min_idx] = temp;
}
}
其中,参数 arr
和 n
的含义与冒泡排序中相同。我们使用两层循环来遍历未排序部分的所有元素,每次选择未排序部分的最小值将其添加到已排序部分的末尾。
快速排序
快速排序是一种高效的排序算法,其基本思想是选择一个元素作为枢纽(pivot),将小于枢纽的元素放在左边,将大于枢纽的元素放在右边,然后对左右两个部分分别进行递归调用。最终得到的序列是有序的。
具体的实现代码如下:
void quickSort(int arr[], int low, int high) {
if (low < high) {
int pi = partition(arr, low, high);
quickSort(arr, low, pi-1);
quickSort(arr, pi+1, high);
}
}
int partition(int arr[], int low, int high) {
int pivot = arr[high];
int i = (low - 1);
for (int j = low; j <= high-1; j++) {
if (arr[j] < pivot) {
i++;
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
int temp = arr[i+1];
arr[i+1] = arr[high];
arr[high] = temp;
return (i+1);
}
其中,参数 arr
表示待排序的数组,参数 low
和 high
分别表示数组的起始和结束位置。我们使用递归的方式实现快速排序,首先选择一个元素作为枢纽,然后分别对左右两个部分进行递归排序。
这里也让我们来看两个示例说明,以方便理解。
示例1:
int arr[] = {5, 2, 9, 3, 7, 6, 8, 1, 4};
int n = sizeof(arr)/sizeof(arr[0]);
bubbleSort(arr, n);
将数组 arr
定义为 {5, 2, 9, 3, 7, 6, 8, 1, 4}
,数组的大小为 n
,然后使用冒泡排序算法对其进行排序。
示例2:
int arr[] = {5, 2, 9, 3, 7, 6, 8, 1, 4};
int n = sizeof(arr)/sizeof(arr[0]);
quickSort(arr, 0, n-1);
将数组 arr
定义为 {5, 2, 9, 3, 7, 6, 8, 1, 4}
,数组的大小为 n
,然后使用快速排序算法对其进行排序。
以上就是三种常见的排序算法的实现方法,以及两条示例代码的说明。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用c语言实现冒泡排序,选择排序,快速排序 - Python技术站