Aaron学习笔记

少壮不努力,长大没饭吃!
posts - 4, comments - 13, trackbacks - 0, articles - 37

选择排序

Posted on 2009-03-26 11:16 赞劲小子 阅读(331) 评论(0)  编辑 收藏 引用 所属分类: 算法设计与分析
直接选择排序的基本思想
     n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:
 ①初始状态:无序区为R[1..n],有序区为空。
 ②第1趟排序
     在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
……
 ③第i趟排序
第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R[i..n](1≤i≤n-1)。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R[i]交换,使R[1..i]和R[i+1..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
     这样,n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。
#include "iostream.h"

void selectionSort(int array[], const int size);

int main(){
    
const int size = 10;
    
int array[size] = {3,5,1,8,7,4,2,9,6,10};
    selectionSort(array,size);
    
for(int i = 0; i < size; i++){
        cout 
<< array[i] << "  ";
    }
    
return 0;
}

void selectionSort(int array[], const int size){
    
int min; // 最小值的位置
    int pass,j; //循环控制
    int temp;
    
for(pass = 0; pass < size - 1; pass++){
        min 
= pass;
        
for(j = pass + 1; j < size; j++){
            
if(array[j] < array[min])
                min 
= j;
        }
        
if(min != pass){
            temp 
= array[pass];
            array[pass] 
= array[min];
            array[min] 
= temp;
        }
    }
}



只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理