• 简单选择排序


    在学了冒泡排序后,会发觉这种算法就是不断比较交换。虽简单直接,显然给人一种繁琐的感觉。那有没有更好一点的算法呢?这当然有啦,没有就糟糕透了 :-P

    这篇文章介绍一种较冒泡要好的排序算法:简单选择排序

    看到“选择”这两字估计也猜到一二了。没错,这种算法的思想就是:待找到了最适合的那位数的位置我才选择与它进行交换

    这样做,我们大大省下了很多不必要的交换。因为在代码编写中,交换函数是经常使用,所以一般将其封装成一个函数进行调用。如果存在非常多不必要的交换操作,这就产生了非常多不必要的函数调用。要知道,函数的调用是要压栈弹栈的,这样带来的时间开销无疑是无用功。所以在排序时找到合适的关键字再做交换,并且只移动一次就能完成相应关键字的排序定位

    代码:

    1. #include <stdio.h>  
    2.   
    3. void swap(int *a, int *b);  
    4.   
    5. int main()  
    6. {  
    7.     int    a[10] = {51, 2, 65, 18, 14, 62, 5, 6, 7, 8};  
    8.     int    i, j;  
    9.     int    min;     
    10.     for (i = 0; i < 10; i++)  
    11.     {  
    12.         min = i;  
    13.         for (j = i + 1; j < 10; j++)  
    14.         {  
    15.             if (a[min] > a[j])  
    16.             {  
    17.                 min = j;  
    18.             }  
    19.         }  
    20.         if (min != i)  
    21.         {  
    22.             swap(&a[min], &a[i]);  
    23.         }  
    24.     }  
    25.     for (i = 0; i < 10; i++)  
    26.     {  
    27.         printf("%d ", a[i]);  
    28.     }  
    29.     return    0;  
    30. }  
    31. void swap(int *a, int *b)  
    32. {  
    33.     int    temp;  
    34.     temp = *a;  
    35.       *a = *b;  
    36.       *b = temp;  
    37. }  

    选择排序最坏情况的时间复杂度是O(n²)
    虽与冒泡一一样,但是选择排序的性能要优于冒泡,因为明显地减少了交换的操作次数

    http://blog.csdn.net/cbs612537/article/details/8513945

  • 相关阅读:
    发送短信/邮件/打电话 code(转)
    如何学习算法
    堆和栈的区别
    2010 baidu笔试
    关于TableView中图片的延时加载(转)
    sqlite + UITableView 实现iPhone大数据浏览
    2010 Google中国笔试试题
    海量数据处理方法总结(转)
    IPhone WebApp 设计开发工具与资源(转)
    DynamicDataSet
  • 原文地址:https://www.cnblogs.com/wuyuankun/p/3755273.html
Copyright © 2020-2023  润新知