[数据结构] 选择排序

选择排序

  常用的选择排序方法有简单选择排序和堆排序,这里只说简单选择排序,堆排序后面再说。

简单选择排序

  设所排序序列的记录个数为n,i 取 1,2,…,n-1 。 
从所有n-i+1个记录(Ri,Ri+1,…,Rn)中找出排序码最小(或最大)的记录,与第i个记录交换。执行n-1趟 后就完成了记录序列的排序。

以排序数组{3,2,1,4,6,5}为例

简单选择排序性能

  在简单选择排序过程中,所需移动记录的次数比较少。最好情况下,即待排序记录初始状态就已经是正序排列了,则不需要移动记录。  
最坏情况下,即待排序记录初始状态是按第一条记录最大,之后的记录从小到大顺序排列,则需要移动记录的次数最多为3(n-1)。

  简单选择排序过程中需要进行的比较次数与初始状态下待排序的记录序列的排列情况无关。 
当i=1时,需进行n-1次比较;当i=2时,需进行n-2次比较;依次类推,共需要进行的比较次数是(n-1)+(n-2)+…+2+1=n(n-1)/2,即进行比较操作的时间复杂度为O(n^2),进行移动操作的时间复杂度为O(n)。 

  简单选择排序是不稳定排序。

简单选择排序Java实现

public static void main(String[] args) {
        int[] number = {3,1,2,8,4,5,24,12};
        SimpleSort(number);
        for(int i = 0; i < number.length; i++) {
            System.out.print(number[i] + " ");
            }
    }
public static void SimpleSort(int[] arr) {
            int length=arr.length;
            int temp;
            for(int i=0;i<length-1;i++){
                int min=i;
                for(int j=i+1;j<length;j++){ //寻找最小的数
                    if(arr[j]<arr[min]){
                        min =j;
                    }
                }
                if(min!=i){
                     temp = arr[min];
                     arr[min]=arr[i];
                     arr[i]=temp;
                }
            }
        }   

文中图片来源 http://blog.csdn.net/shuilan0066/article/details/8659163

版权声明:请尊重个人劳动成果,转载注明出处,谢谢!

http://blog.csdn.net/amazing7/article/details/51372976

时间: 2024-11-03 20:57:28

[数据结构] 选择排序的相关文章

数据结构例程——选择排序之直接选择排序

本文是[数据结构基础系列(9):排序]中第6课时[选择排序之直接选择排序]的例程. #include <stdio.h> #define MaxSize 20 typedef int KeyType; //定义关键字类型 typedef char InfoType[10]; typedef struct //记录类型 { KeyType key; //关键字项 InfoType data; //其他数据项,类型为InfoType } RecType; //排序的记录类型定义 void Sele

Java数据结构及算法实例:选择排序 Selection Sort_java

/** * 选择排序的思想: * 每次从待排序列中找到最小的元素, * 然后将其放到待排的序列的最左边,直到所有元素有序 * * 选择排序改进了冒泡排序,将交换次数从O(N^2)减少到O(N) * 不过比较次数还是O(N) */ package al; public class SelectSort { public static void main(String[] args) { SelectSort selectSort = new SelectSort(); int[] elements

数据结构例程——选择排序之堆排序

本文是[数据结构基础系列(9):排序]中第7课时[选择排序之堆排序]的例程. 对算法运行过程,补充了一个示例,见[补充示例]. #include <stdio.h> #define MaxSize 20 typedef int KeyType; //定义关键字类型 typedef char InfoType[10]; typedef struct //记录类型 { KeyType key; //关键字项 InfoType data; //其他数据项,类型为InfoType } RecType;

数据结构教程 第三十六课 选择排序、归并排序

教学目的: 掌握选择排序,归并排序算法 教学重点: 选择排序之堆排序,归并排序算法 教学难点: 堆排序算法 授课内容: 一.选择排序 每一趟在n-i+1(i=1,2,...n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录. 二.简单选择排序 算法: Smp_Selecpass(ListType &r,int i) { k=i; for(j=i+1;j<n;i++) if (r[j].key<r[k].key) k=j; if (k!=i) { t=r[i];r[i]=r[k

c/c++ 数据结构和算法-选择排序/冒泡排序

冒泡排序 #include <stdio.h> void BubbleSort(int *a,int n);   int main(void) {     int k;     int a[10]={2,4,6,8,0,1,3,5,7,9};     for(k=0;k<10;k++)     {       if(k==9)           printf("%d\n",a[k]);       else           printf("%d,&qu

php数据结构 算法(PHP描述) 简单选择排序 simple selection sort_php技巧

复制代码 代码如下: <?php /** * 简单选择排序 simple selection sort * * 原理: 一次选定数组中的每一个数,记下当前位置并假设它是从当前位置开始后面数中的最小数min=i,从这个数的下一个数开始扫描直到最后一个数,并记录下最小数的位置min,扫描结束后如果min不等于i,说明假设错误,则交换min与i位置上数. */ function sort_simple_selection($list) { $len = count($list); if(empty($

C++实现树形选择排序 (tree selection sort)

算法逻辑: 根据节点的大小, 建立树, 输出树的根节点, 并把此重置为最大值, 再重构树. 因为树中保留了一些比较的逻辑, 所以减少了比较次数. 也称锦标赛排序, 时间复杂度为O(nlogn), 因为每个值(共n个)需要进行树的深度(logn)次比较. 参考<数据结构>(严蔚敏版) 第278-279页. 树形选择排序(tree selection sort)是堆排序的一个过渡, 并不是核心算法. 但是完全按照书上算法, 实现起来极其麻烦, 几乎没有任何人实现过. 需要记录建树的顺序, 在重构时

数据结构内部排序实验报告

问题描述 数据结构内部排序实验报告 一.实验目的 1.掌握排序的有关概念和特点. 2.熟练掌握直接插入排序.希尔排序.冒泡排序.快速排序.简单选择排序.堆排序.归并排序.基数排序等算法的基本思想.. 3.关键字序列有序与无序,对于不同的排序方法有不同的影响,通过该实验进一步加深理解. 二.实验内容 设有关键字序列k={ 12 , 45 , 21 , 12 , 30 , 2 , 68 , 33 },试用各种排序算法进行排序. 三.实验环境 TC或VC++ 四.实验步骤 1.从键盘输入上述8个整数,

Python实现冒泡,插入,选择排序简单实例_python

本文所述的Python实现冒泡,插入,选择排序简单实例比较适合Python初学者从基础开始学习数据结构和算法,示例简单易懂,具体代码如下: # -*- coding: cp936 -*- #python插入排序 def insertSort(a): for i in range(len(a)-1): #print a,i for j in range(i+1,len(a)): if a[i]>a[j]: temp = a[i] a[i] = a[j] a[j] = temp return a #