一、复杂度的概念
复杂度是衡量算法的质量优劣的标准,一般可分为“时间复杂度”、“空间复杂度”。
【题5】 编程实现选择排序
选择是指在每次排序时,选择最大或者最小项,将其放入适当的位置上,反复操作,知道所有的数据排序完成为止。
例如:一个班级学生排队,先将最高的学生排在队首,然后在其他学生中再挑出最高的一个,排在第二的位置,依次类推,直到排完为止。
/*选择排序*/
void SelectSortArray(int arr[], n)
{
for(int i=0; i<n-1; i++)
{
int index = i; //
for(int j=i+1; j < n; j++) //找出最小元素的下标
{
if(arr[j] < arr[index])
{
index = j;
}
}
int temp = arr[index];
arr[index] = arr[i];
arr[i] = temp;
}
}
【题6】 编程实现冒泡排序
顾名思义,冒泡排序法,就是把要排序的一组数据中的元素当成一个一个气泡,每次比较相邻两个相邻“气泡”的"轻重’,“气泡”较重的往下"沉",轻的往上”浮“。
原理:从第一个数开始,依次往后进行相邻两个数之间的比较,如果前面的数比后面的数大就交换这两个数的位置,如果前面的数较小或两者一样大,就不作处理。
/*冒泡排序*/
void BubbleSortArray(int arr[],n)
{
for(int i = 0; i < n-1; i++)
{
for(int j = 0; i < n-1-i; j++)
{
if(arr[j] < arr[j+1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
【题7】 直接插入排序
/*插入排序*/
void insertSortArray(int arr[],n)
{
int curEle, preIndex; //记录当前待排序元素和前一个元素的下标
for(int i=0; i < n; i++)
{
preIndex = i - 1;
curEle = arr[i];
while(preIndex >=0 && arr[preIndex] > curEle)
{
arr[preIndex+1] = arr[preIndex]; //移动元素
preIndex--;
}
//将待排序元素插入新的位置
arr[preIndex+1] = curEle;
}
}