1. 前言
哈哈,最常用的数据结构应该是数组吧,有人说是单一变量,单一变量那也不叫结构啊。
所以一般数据结构的第一课是数组,跟数组这种数据结构相关的操作,最常见的就是排序啦。
排序里面最简单也是最常用的,应该就是冒泡排序和选择排序了。
2. 冒泡排序说明
冒泡的意思就是从水底往上面冒泡(我们把数组第一个元素看做水底),对于数组来说,是通过比较和换位,每次把最大(最小)的一个元素移动到顶上来,然后剩下的再次冒泡排序。
3. 冒泡排序代码
#include<stdio.h>
//冒泡排序 此处演示从小到大排序
void bubbleSort(int arr[], int length)
{
int i,j,temp;
for (i = 0; i < length-1; i++) //一共有n-1轮
{
for (j = 0; j < length - 1-i; j++) {//每轮把最大的1个放到了最后面
if (arr[j] > arr[j + 1]) //交换
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main()
{
//待排序数组
int length = 10;
int arr[10] = {1,3,5,7,2,4,6,8,10,9};
int i;
printf("\n排序前:");
for (i = 0; i < length; i++)
{
printf("%d ",arr[i]);
}
//排序
bubbleSort(arr, length);
printf("\n排序后:");
for (i = 0; i < length; i++)
{
printf("%d ", arr[i]);
}
return 1;
}
4. 选择排序说明
相对于冒泡排序,选择排序更加好理解,所以我平时写排序最多的,就是选择排序了。
扫描数组,把最大(最小)的放到第一个位置,然后剩下再扫描,把最大(最小)放第二个位置,最后就排序完了。
5. 选择排序代码
#include<stdio.h>
//选择排序 此处演示从小到大排序
void selectSort(int arr[], int length)
{
int i,j,temp;
for (i = 0; i < length-1; i++) //从第一个位置开始选择最小的
{
for (j = i+1; j < length; j++) {//与剩下的依次比较
if (arr[i] > arr[j]) //交换
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
int main()
{
//待排序数组
int length = 10;
int arr[10] = {1,3,5,7,2,4,6,8,10,9};
int i;
printf("\n排序前:");
for (i = 0; i < length; i++)
{
printf("%d ",arr[i]);
}
//排序
selectSort(arr, length);
printf("\n排序后:");
for (i = 0; i < length; i++)
{
printf("%d ", arr[i]);
}
return 1;
}
6. 后语
说实话平时也能写出排序来,但是还真分不清自己到底用了什么排序…借此机会回顾下可能是的,最初的算法。