本文主要是介绍C语言 两种简单的比较方法(冒泡法和比较法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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<stdio.h>
#include<string.h>
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;
}
运行结果:
冒泡法.
选择法.
这篇关于C语言 两种简单的比较方法(冒泡法和比较法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!