前言
本文简单介绍了C语言的冒泡排序、选择排序、快速排序,结合本人的理解与使用做一下记录。
一、冒泡排序
思想:(以小到大排序为例)假设一个数组有n个数,第一轮遍历这个数组的前(n-1)个数,遍历的时候比较当前位置和下一个位置的数,如果当前位置的数比较大,就跟下一个数交换位置;所以第一轮结束之后,就会把最大的数“沉”到数组的末尾位置;第二轮遍历这个数组的前(n-2)个数,按照前面的方法把第二大的数“沉”到数组的倒数第二个位置;依此类推,(n-1)轮之后每一个较大的数都按顺序沉到了数组的相应位置。
二、选择排序
思想:使用for循环对数组进行排序;每循环一次,选择出一个较大的数,然后与
数组中的第n个位置交换数据,n从0开始。假设这个数组有n个数据,那么循环(n-1)次即可完成排序。
三、 快速排序
思想:
- 首先确定一个target,找到这个target在数组中的位置;它会把这个数组分割成两部分(你可以认为是两个待排序的区域),并且左边的数都比它小,右边的数都比它大;
- 这两个区域都设置了新的target,然后通过递归确定左边这个区域的新target的位置和右边这个区域的新target的位置;继续分割继续递归直到区域的数据只有一个为止;
- 最终可以实现数组中的每一个数据的左边的数都比它小且右边的数都比它大,从而完成排序。
四、代码设计与实现
代码设计
编写一个程序,随机生成10个整数并赋值给数组;然后分别使用冒泡排序、选择排序和快速排序对这个数组进行排序并打印出排序后的结果。
代码实现
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
void BubbleSort(int *a, int length) ;
void select_sort(int *array, int size);
void quick_sort(int *array, int low, int high);
#define SIZE 10
//#define SELECT_SORT
//#define BUBBLE_SORT
#define QUICK_SORT
int main(void)
{
int array[SIZE];
int i;
srand(time(0)); //设置随机数种子
//使用随机数初始化数组
for(i = 0; i < SIZE; i++)
{
array[i] = rand() % (50-3+1)+3; //生成[3,50]范围内的随机整数
}
printf("排序之前,数组为:");
for(i = 0; i < SIZE; i