排序1-简单选择排序

  1. 选择排序的基本思想: 
    对n个记录进行扫描,选择最小的记录将其输出,接着在剩下的n-1个记录中扫描,选择最小的记录将其输出,……不断重复这个过程,直到剩下最后一个记录为止。
 1 //1.简单选择排序
 2  void selectSort(int a[],int num)
 3  {
 4      int min=0,temp=0;//记录最小数对应的下标
 5      for(int i=0;i<num-1;i++)
 6      {
 7          min=i;
 8          for (int j=i+1;j<num;j++)
 9          {
10              if (a[min]>a[j])
11              {
12                  min=j;
13              }
14          }
15          if (min!=i)
16          {
17             temp=a[i];
18             a[i]=a[min];
19             a[min]=temp;
20          }
21      }
22  }
23
24
25 int main()
26 {
27     int array[9]={0};
28     srand(time(NULL));
29     for (int i=0;i<9;i++)
30     {
31         array[i]=rand()%100;  //产生0-99的随机数
32     }
33     cout<<"排序之前的数组\n";
34     print(array,9);
35     selectSort(array,9);
36     cout<<"排序之后的数组\n";
37     print(array,9);
38
39     system("pause");
40     return 0;
41 }


运行结果: 

2.时间复杂度计算 
第i趟需要进行n-i次比较,因此比较次数为n(n-1)/2. 交换次数,最好交换0次,最坏交换次数为n-1次。 最终的排序次数是比较和交换次数之和。因此,最终的总时间复杂度仍未为(n2)。

时间: 2024-08-26 04:14:37

排序1-简单选择排序的相关文章

经典排序算法--简单选择排序

算法简介 简单选择排序是一种选择排序. 选择排序:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止. 白话理解 依然已排队为例,在排队时,有的老师可能会选择这样排序,先在一列中选出最矮的,放在第一位,然后选出第二矮的,放在第二位.队伍完成排序.而这就是选择排序的思想. 简单排序处理流程 (1)从待排序序列中,找到关键字最小的元素: (2)如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换: (3)从余下的 N - 1 个元素中,找出关键字最小

排序——直接选择排序(简单选择排序)

直接选择排序也称简单选择排序,是一种相对简单的排序算法,它的基本思想是:从一列数中找出最小的,和第一个交换:剩下的重新找出最小的,和这列数的第二个交换,......一直进行n-1次比较之后,该数列已经为有序数列了. 例如:已知一组无序数列:6 3 5 1 4 2 9 第一次:[6 3 5 1 4 2 9] 最小数为:1 第二次:1 [3 5 6 4 2 9] 最小数为:2 第三次:1 2 [5 6 4 3 9] 最小数为:3 第四次:1 2 3 [6 4 5 9] 最小数为:4 第五次:1 2

排序之简单选择排序

前言 本篇博客是在伍迷兄的博客基础上进行的,其博客地址点击就可以进去,里面好博客很多,我的排序算法都来自于此:一些数据结构方面的概念我就不多阐述了,伍迷兄的博客中都有详细讲解,而我写这些博客只是记录自己学习过程,加入了一些自己的理解,同时也希望给别人提供帮助. 基本思想 选择排序的基本思想是每一趟在n-i+1(i=1,2,…,n-1)个记录中选取关键字最小的记录作为有序序列的第i个记录.我们这里先介绍的是简单选择排序法.简单选择排序法(Simple Selection Sort)就是通过n-i次

选择排序——1简单选择排序实现

public void SelectSort(int[] ary) { // 需要遍历获得最小值的次数 for (int i = 0; i < ary.Length - 1; i++) { int temp = 0; int index = i; // 用来保存最小值得索引 //在后面的序列中,寻找最小的数 for (int j = i + 1; j < ary.Length; j++) { if (ary[index] > ary[j]) { index = j; } } //交换位置

排序五 简单选择排序

要点 简单选择排序是一种选择排序. 选择排序:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止. 简单排序处理流程: ( 1 )从待排序序列中,找到关键字最小的元素:( 2 )如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换:( 3 )从余下的 N - 1 个元素中,找出关键字最小的元素,重复( 1 ).( 2 )步,直到排序结束. 如图所示,每趟排序中,将当前第 i 小的元素放在位置 i 上. 核心代码 public void selec

4.3_8种常用排序算法3(选择排序:简单选择排序+堆排序)

[简单选择排序] package com.sort.demo3; import java.util.Arrays; /** * 简单选择排序 */ public class SelectSort { public static void main(String[] args) { int[] arr = new int[]{1,4,5,7,3,9,8,0,2,6}; System.out.println(Arrays.toString(arr)); selectSort(arr); System

C语言排序算法——简单选择排序算法

冒泡排序算法的思想是不断的交换,通过交换完成最终的排序. 选择排序的基本思想是每一趟在n-i+1个记录中选取最小的记录,作为第i个的记录. 1 void SimpleSelectSort(int *p) 2 { 3 int i,j,min; 4 for(i=0;i<10;i++) 5 { 6 min=i;    //将当前下标定义为最小下标 7 for(j=i+1;j<10;j++) 8 { 9 if(p[min>p[j]])    //如果有小于当前最小值的 10 { 11 min=j

选择排序-简单选择排序

代码 [3, 1, 5, 7, 2, 4, 9, 6]--把全部的最小的数(1)的和第 1 个数(3)交换位置 [1, 3, 5, 7, 2, 4, 9, 6]--把余下的最小的数(2)的和第 2 个数(3)交换位置 [1, 2, 5, 7, 3, 4, 9, 6]--把余下的最小的数(3)的和第 3 个数(5)交换位置 [1, 2, 3, 7, 5, 4, 9, 6]--把余下的最小的数(4)的和第 4 个数(7)交换位置 第五轮不交换-----把余下的最小的数(5)的和第 5 个数(5)交换

对于近似有序序列(即除掉少数K个元素后是有序序列且K&lt;&lt;n),试分析直接插入排序,冒牌排序和简单选择排序的时间复杂度

学弟问的一道数据结构的题,关于一些排序算法的时间复杂度. 针对近似有序序列, ①当使用直接插入排序时,其基本操作为数组中元素的移动.最好情况下,待排序列有序,无需移动,此时时间复杂度为O(n), 当为近似有序序列是,其基本操作执行的次数是K次当前循环的最大值的和,即时间复杂度为O(k.n)由于k远小于n, 综合考虑直接插入排序的时间复杂度为O(n) ②当使用冒泡排序时,默认为普通冒泡排序,其基本操作为元素间比较的次数,因此无论 是否是近似有序,时间复杂度均为O(n^2) ③当使用简单排序时,其基

【选择排序】简单选择排序

思想:每经过一趟比较就找出一个最小值,与待排序列最前面的位置互换即可. 算法分析:时间复杂度O(n2):稳定性:不稳定. 1 #include <stdio.h> 2 3 void SelectSort(int a[], int len) 4 { 5 int i, j, k, tmp; 6 for (i = 0; i < len - 1; i++) 7 { 8 k = i; 9 for (j = i + 1; j < len; j++) 10 { 11 if (a[j] <