三种排序法
冒泡排序法: 从序列头部开始遍历,两两比较,如果前者比后者大,则交换位置,直到最后将最大的数(本次排序最大的数)交换到无序序列的尾部,从而成为有序序列的一部分。需要进行n-1轮排序,n*(n-1)/2次比较,时间复杂度O(n^2)。
插入排序法: 从数组的第二个元素,向前开始比较。比第一个元素小,则交换位置。如果第二个元素比较完毕,那就第三个,第四个… 以此类推比较到最后一个元素时,完成排序。由n-1次排序过程组成,每一次排序保证从第一个位置到当前位置的元素为已排序状态。
相较与冒泡排序,插入排序是当前元素和已排序的数组比较,冒泡是“当前”元素在未排序的数组中比较。
选择排序法: 先保存第一个元素的下标,然后后面所有的数依次与第一个元素相比,如果遇到更小的,则记录更小的那个数的下标,然后后面所有的数都依次与那个更小的数比较,直到最后将最小的数的下标找出来,然后再将这个数放到最左边,即与下标为 0 的数互换。如果最小的数的下标就是 0 那么就不用互换。
冒泡排序只要遇到前面比后面大的就互换,而选择排序是比较一轮才互换一次,而且如果本轮中最小的就是最左边那个数则不用互换。所以从这个角度看,选择排序比冒泡排序的效率要高。而且通过上面对选择排序的分析发现,从逻辑上讲,与冒泡排序相比,选择排序更符合人的思维。
#include<iostream>
using namespace std;
void bubbleSort(float* pData, int length)
{
float temp;
for (int i=0;i<(length-1);++i) //n-1轮排序
{
for (int j=0;j<(length-i-1);++j)
{
if(pData[j]<pData[j+1])
{
temp = pData[j];
pData[j] = pData[j+1];
pData[j+1] = temp;
}
}
}
}
void insertSort(float* pData, int length)
{
float temp;
for (int i