C语言
冒泡法
原理:
从前向后两两比较,如果前面大于后面,则交换 每一次交换确定一个值。因为最大的值在最后因此也称为沉石法。
代码如下:
void BubbleSort(int* arr, int len)
{
for (int i = 0; i < len - 1; i++) //控制层数
{
for (int j = 0; j < len - 1 - i; j++) //控制次数
{
if (arr[j] > arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
选择法
原理:
每一轮将待排序序列中最小值和待排序序列的第一个值进行交换。
代码如下:
void InsectSort(int* arr, int len)
{
int minindex = 0;
for (int i = 0; i < len - 1; i++)//控制层数
{
minindex = i;
for (int j = i; j < len; j++)//找到待排序序列的最小值所在的下标 //优化:int j =i+1;
{
if (arr[j] < arr[minindex])
{
minindex = j;
}
}
if (minindex != i)//优化:当最小值所在下标和带排序序列的第一个值 不是用一个的时候,才交换
{
int tmp = arr[i];
arr[i] = arr[minindex];
arr[minindex] = tmp;
}
}
}
总结
- 两种比较方法都是进行for循环的嵌套;
- 两种比较方法中for循环的嵌套第一层都是控制层数,第二次控制比较的次数;
- 对于选择法而言,是找到待排序序列的最小值所在的下标,这样才可以将交换的值正确放进交换的位置,不然进行的只是值传递。
应用:将数组3,6,1,9,2,7按照从小到大的顺序排序。
#include#include void Show(int* arr, int len) { for (int i = 0; i < len; i++) { printf("%d ", arr[i]); } printf("n"); } int main() { int arr[] = { 3,6,1,9,2,7 }; //BubbleSort(arr, sizeof(arr)/sizeof(arr[0])); InsectSort(arr, sizeof(arr) / sizeof(arr[0])); Show(arr, sizeof(arr) / sizeof(arr[0])); return 0; }
运行结果:
冒泡法.
选择法.



