作者简介:大家好我是小唐同学(๑><๑),为梦想而奋斗的小唐,让我们一起加油!!!
个人主页:小唐同学(๑><๑)的博客主页
系列专栏:数据结构
博友们如果也是新手入门数据结构我希望大家可以多加练习 数据结构题库在牛客网就有已经给大家附上链接,可以直接点击跳转:刷题点这里
牛客网支持ACM模式哦,刷算法题也很推荐哦!!!
下面上文章------》
目录
刷题网站图示:
算法介绍:
直接选择排序也称为简单选择排序,整个过程就是每一趟都将无序区中的所有元素进行逐一比较,找到最小元素(根据要求可以最大-降序)让后与无序区首个元素进行比较
输入:
我们可以把n个数的序列放到数组中(可有序可无序)
输出:
输出一个有序数列(升序或降序)
图示过程:
实例演示:
初始关键字:『 8,5,2,6,10,3,1,4,0,7 』
第一趟排序后:0,『5,2,6,10,3,1,4,8,7』
第二趟排序后:0,1,『2,6,10,3,5,4,8,7』
第三趟排序后:0,1,2,『6,10,3,5,4,8,7』
第四趟排序后:0,1,2,3,『10,6,5,4,8,7』
第五趟排序后:0,1,2,3,4,『6,5,10,8,7』
第六趟排序后:0,1,2,3,4,5,『6,10,8,7』
第七趟排序后:0,1,2,3,4,5,6,『10,8,7』
第八趟排序后:0,1,2,3,4,5,6,7,『8,10』
第九趟排序后:0,1,2,3,4,5,6,7,8,『10』
直接得出最后结果:0 1 2 3 4 5 6 7 8 10
代码展示:
# include <stdio.h> int a[100]; int main() { int n; scanf("%d",&n); a[n]; for(int i=0;i<n;i++) { scanf("%d",&a[i]); } int k; for(int i=0;i<n-1;i++) { for(int j=i+1;j<n;j++) { if(a[i]>a[j]) { k=a[i]; a[i]=a[j]; a[j]=k; } } } for(int i=0;i<n;i++) { printf("%d ",a[i]); } }
测试结果:
时间复杂度:
因为有两层for循环 而且每个都要进行比较 所以时间复杂度为O(n^2);
空间复杂度:
只有一空间变量 k,所以它空间复杂度则为常数O(1);