选择排序

简介: 常用排序------选择排序

选择排序

1.原理

    它是找出最大数(或最小数)放到最前面,它不再是数组前后比较,而是在一轮里一直拿一个位置数跟后面的比较。

    通俗的说就是在排队的时候,先拿一号依次跟后面的每一个人都比较,如果和它比较的人比一号小,则他俩换位,小的这个人站第一排,拿这个人跟后面比,以此类推,确保第一个是最低的。第二轮从第二个人开始,重复上面的操作,不在动排好的人

假设10个人排队int a[10];

比较第一轮:

for(int i=0;i<9;i++){

for(int j=i+1;j<10;j++){

    if(a[i]>a[j]){

            t=a[i];

            a[i]=a[j];

            a[j]=t;

}

}

需要注意的是for循环里的三个表达式,我们已经把第一个赋给max,所以就直接从第二个开始,也就是从索引1开始,i小于10

2.举例
1.题目
输入10个数对其进行排序

2.代码

#include "stdio.h"
int main() {
    int t, a[10];
 
    for (int i = 0; i < 10; i++) {
        scanf("%d", &a[i]);
    }
 
    for (int i = 0; i < 9; i++) {
 
        for (int j = i + 1; j < 10; j++) {
 
            if (a[i] > a[j]) {
 
                t = a[i];
 
                a[i] = a[j];
 
                a[j] = t;
            }
 
        }
 
    }
 
    for (int i = 0; i < 10; i++) {
        printf("%d\t", a[i]);
    }
 
    return 0;
}
选择排序的交换操作介于 0 和 (n - 1)次之间。选择排序的比较操作为 n (n - 1) / 2 次之间。选择排序的赋值操作介于 0 和 3 (n - 1) 次之间。比较次数O(n^2),比较次数与关键字的初始状态无关,总的比较次数N=(n-1)+(n-2)+...+1=n*(n-1)/2。交换次数O(n),最好情况是,已经有序,交换0次;最坏情况交换n-1次,逆序交换n/2次。交换次数比冒泡排序少多了,由于交换所需CPU时间比比较所需的CPU时间多,n值较小时,选择排序比冒泡排序快。
相关文章
|
4月前
|
算法 搜索推荐 Java
选择排序就是这么容易
选择排序就是这么容易
30 0
|
5月前
|
人工智能 算法 搜索推荐
2.选择排序
2.选择排序
21 0
|
5月前
|
搜索推荐 C++
C++选择排序的实现
C++选择排序的实现
|
10月前
|
存储 搜索推荐 索引
选择排序
选择排序
29 1
|
11月前
|
搜索推荐
16 选择排序
16 选择排序
30 0
|
机器学习/深度学习 搜索推荐 算法
选择排序的实现
选择排序的实现
94 1
|
搜索推荐 C语言
选择排序就这么简单
从上一篇已经讲解了冒泡排序了,本章主要讲解的是选择排序,希望大家看完能够理解并手写出选择排序的代码,然后就通过面试了!如果我写得有错误的地方也请大家在评论下指出。
158 0
选择排序就这么简单
|
算法 搜索推荐 测试技术
直接选择排序
直接选择排序
103 0
直接选择排序
|
搜索推荐 算法 JavaScript