排序算法——选择排序

来源:互联网 发布:sql删除视图数据 编辑:程序博客网 时间:2024/06/06 02:28

1. 算法概述

  选择排序是对冒泡排序的一种改进。选择排序(Selection Sort)的基本思想是:每一趟在n-i+1(i=1,2,...,n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序树形选择排序堆排序

2. 简单的选择排序

2.1 简单的选择排序分析

  简单的选择排序可以描述为:在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的数值与第二个元素交换,以此类推,第N-1趟遍历剩下的2个数据,找出其中最小的数值与第N-1个元素交换,完成整个排序的过程。
下面是选择排序过程的示例:

  一趟选择排序的操作为:通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1<=i<=n)个记录交换之。容易看出,简单选择排序过程中,所需进行记录移动的操作次数较少。然而,无论记录初始排列如何,所需进行的关键字间的比较次数相同,均为n(n -1)/2。因此,总时间复杂度也是O(n^2)

2.2 简单的选择排序实现

/**********************************************************************************Copyright(C),Your Company*FileName:  main.cpp*Author:  Huangjh*Version:*Date:  2017-12-17*Description:  简单选择排序的实现*Others:**********************************************************************************/#include <stdio.h>void SelectSort(int *pBuffer, int iSize){for (int i = 0; i < iSize - 1; i++){int iMinKey = i;for (int j = i; j < iSize - 1; j++){if (pBuffer[j] > pBuffer[j + 1])iMinKey = j + 1;}if (iMinKey != 0){int iTemp;iTemp = pBuffer[i];pBuffer[i] = pBuffer[iMinKey];pBuffer[iMinKey] = iTemp;}}}int main(void){int szBuffer[] = { 49, 38, 65, 97, 76, 13, 27, 49 };SelectSort(szBuffer, 8);printf("简单选择排序后的输出:\r\n");for (int i = 0; i < 8; i++){printf("%d ", szBuffer[i]);}printf("\r\n");return 0;}
  运行输出如下:
简单选择排序后的输出:13 27 38 49 49 65 76 97

3. 树形选择排序

后续补充

4. 堆排序

后续补充


原创粉丝点击