前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简谈选择排序

简谈选择排序

作者头像
Jacklin
发布2018-05-15 17:17:59
5560
发布2018-05-15 17:17:59
举报
文章被收录于专栏:攻城狮的动态攻城狮的动态

上篇文章说到了冒泡排序,这篇文章讲解一下选择排序算法。具体内容还是从算法实现思想、时间复杂度、算法稳定性以及算法实现四个方面介绍。

1

算法实现思想

1、n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果;

2、初始状态:无序区为R[1..n],有序区为空;

3、第1趟排序: 在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区;

4、第i趟排序:第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。

2

时间复杂度:min = O(n),max = O(n^2)

3

算法稳定性:不稳定

不稳定的原因举例:5 5 3 变为 3 5 5,第一趟排序,第一个5会和3的位置互换,从而破坏该算法的稳定性。

4

算法实现 (升序)

C语言实现:

代码语言:javascript
复制
void selectAlgorithm(
    int array[]){ 
     int count = sizeof(array)/sizeof(int); 
     int index;  
     for (int i = 0; i < count - 1; i ++) {
         index = i;      
         for (int j = i + 1; j < count; j ++) {          
             if (array[index] > array[j]) {
                 index = j;
          }
      }  
            if (index != i) {      
                int temp = array[i];      
                array[i] = array[index];      
                array[index] = temp;
        }
    }
}

Swift语言实现:

代码语言:javascript
复制
func selectorMethods(array: [Int]) -> [Int] {  
    var dataArray = array  
    let count = dataArray.count
    var index: Int

    for i in 0..<count-1 {
      index = i      
      for j in i+1..<count {      
        if dataArray[index] > dataArray[j] {
          index = j
       }
   }      
    if index != i {        
        let temp = dataArray[i]
        dataArray[i] = dataArray[index]
        dataArray[index] = temp
     }
    }  
      return dataArray
  }

Objective-C语言实现:

代码语言:javascript
复制
- (NSArray *)selectAlgorithm:(NSArray *)array{
    NSMutableArray *tempArray = [NSMutableArray arrayWithArray:array];
    NSInteger count = tempArray.count;    
    int index;    
    for (int i = 0; i < count - 1; i ++) {      
        index = i;      
        for (int j = i + 1; j < count; j ++) {         
             if (tempArray[index] > tempArray[j]) {              
                 index = j;
      }
    }        
         if (index != i) {
            id temp = tempArray[i];
            [tempArray replaceObjectAtIndex:i withObject:tempArray[index]];
            [tempArray replaceObjectAtIndex:index withObject:temp];
      }
    }  
        return tempArray;
}

最后,感谢大家阅读,如有问题,欢迎大家留言!!!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-02-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 攻城狮的动态 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档