c语⾔从⼤到⼩排序算法,10⼤经典排序算法(动图演⽰+C语⾔
代码)
原标题:10 ⼤经典排序算法(动图演⽰+ C 语⾔代码)
来源:C语⾔与CPP编程
以前也零零碎碎发过⼀些排序算法,但排版都不太好,⼜重新整理⼀次,排序算法是数据结构的重要部分,系统地学习很有必要。
时间、空间复杂度⽐较
排序算法
冒泡排序代码c语言平均时间复杂度
最差时间复杂度
空间复杂度
数据对象稳定性
冒泡排序
O(n2)
plsql安装包和包
O(n2)
O(1)
稳定
选择排序
O(n2)
O(n2)
O(1)
数组不稳定、链表稳定
插⼊排序
O(n2)
O(n2)
O(1)
稳定
快速排序
O(n*log2n)
O(n2)
O(log2n)
不稳定
堆排序
O(n*log2n)
O(n*log2n)
O(1)
javascript window不稳定
归并排序
O(n*log2n)
O(n*log2n)
O(n)
稳定
希尔排序
O(n*log2n)
O(n2)
O(1)
不稳定
pe特效软件计数排序
O(n+m)
O(n+m)
O(n+m)
稳定
桶排序
translate englishO(n)
O(n)
O(m)
稳定
基数排序
O(k*n)
O(n2)
稳定
1 冒泡排序
算法思想:
⽐较相邻的元素。如果第⼀个⽐第⼆个⼤,就交换他们两个。
对每⼀对相邻元素作同样的⼯作,从开始第⼀对到结尾的最后⼀对。这步做完后,最后的元素会是最⼤的数。针对所有的元素重复以上的步骤,除了最后⼀个。
持续每次对越来越少的元素重复上⾯的步骤,直到没有任何⼀对数字需要⽐较。
冒泡排序动图演⽰代码:void bubbleSort(int a[], int n)
{
for(int i =0 ; i< n-1; ++i)
{
for(int j = 0; j < n-i-1; ++j)
{
if(a[j] > a[j+1])
{
int tmp = a[j] ; //交换
a[j] = a[j+1] ;
a[j+1] = tmp;
}
}
}
}
2 选择排序
算法思想:
在未排序序列中到最⼩(⼤)元素,存放到排序序列的起始位置
从剩余未排序元素中继续寻最⼩(⼤)元素,然后放到已排序序列的末尾以此类推,直到所有元素均排序完毕
选择排序动图演⽰代码:function selectionSort(arr) {
var len = arr.length;
var minIndex, temp;
for (var i = 0; i < len - 1; i++) {
minIndex = i;
for (var j = i + 1; j < len; j++) {
if (arr[j] < arr[minIndex]) { // 寻最⼩的数
minIndex = j; // 将最⼩数的索引保存
}
}
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
return arr;
}
3 插⼊排序
算法思想:
从第⼀个元素开始,该元素可以认为已经被排序
取出下⼀个元素,在已经排序的元素序列中从后向前扫描
如果该元素(已排序)⼤于新元素,将该元素移到下⼀位置
重复步骤3,直到到已排序的元素⼩于或者等于新元素的位置将新元素插⼊到该位置后
重复步骤2~5
插⼊排序动图演⽰代码:void print(int a[], int n ,int i){
countifs日期范围统计cout<
for(int j= 0; j<8; j++){
cout<
}
cout<
}
void InsertSort(int a[], int n)
{
for(int i= 1; i
if(a[i] < a[i-1]){ //若第i个元素⼤于i-1元素,直接插⼊。⼩于的话,移动有序表后插⼊int j= i-1;
int x = a[i]; //复制为哨兵,即存储待排序元素
a[i] = a[i-1]; //先后移⼀个元素
while(x < a[j]){ //查在有序表的插⼊位置
a[j+1] = a[j];
j--; //元素后移
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。