1.冒泡排序
这个使接触c语言最基础的算法
稳定性:稳定
时复杂度O(N^2)
2.直接选择排序
直接选择排序是针对冒泡排序的优化,因为他一次可以选出作用域中的最大值和最小值;并将作用域缩小;
时间复杂度:小于O(N^2);仅仅是小一点而已
稳定性:不稳定;有些情况控制不住,选数时是稳定的,但是交换的时候可能会控制不住
int main()
{ int a[10] = { 9,8,7,6,5,4,3,2,1,0 };int n = sizeof(a) / sizeof(int);int begin = 0, end = n - 1;while (begin < end){int maxi = begin, mini = begin;for (int i = begin; i <= end; i++){if (a[i] > a[maxi]){maxi = i;}if (a[i] < a[mini]){mini = i;}}swap(a[begin], a[mini]);if (begin == maxi){ maxi = mini;}swap(a[end], a[maxi]);begin++;end--;}for (auto x : a) {cout << x << endl;}return 0;
}
if (begin == maxi){ //精华都在这条语句上;
maxi = mini;
}//a[begin]=9(最大值),a[mini]=2,a[max]=9;
//此程序是根据下标来交换数值的;begin==max时,swap(a[begin], a[mini])交换后
//a[begin]=2,a[mini]=9,a[max]=2;因为是根据下标来确定数值;//所以a[end]与a[max]交换后,把数值2换出去了;
3.堆排序
主要解决topk问题;优先级队列问题
时间复杂度:O(N^logN)
大堆:顶上那个最大(树中任何一个父亲都大于等于孩子)
小堆:顶上那个最小(树中任何一个父亲都小于等于孩子)
数据结构的构建,完全是建立在C语言上的;而在C++上是可以直接使用容器来进行操作;这里就不再写代码实现
具体的想理解,只能通过做题:力扣:1046、703、692、295;