算法和数据结构(三)--常用算法之选择排序法

  •  选择排序法

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)。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。

void selectionSort(int array[], int array_len)
{
    assert(NULL != array);

    int times;
    int index;
    int index_tmp;
    int tmp;

    //array_len -1 次   
    for(times = 1; times <= array_len - 1; times++)
    {   
        //假定第n次选择排序的最小值
        tmp = array[times-1];
        for(index = times;index <= array_len-1; index++)
        {   
            if(array[index] < tmp)
            {   
                index_tmp = index;
                tmp = array[index];
            }   
        }   
        if(index_tmp != times -1) 
        {   
            array[index_tmp] = array[times-1];
            array[times-1] = tmp;
        }   
    }   

    return;
}
#!/usr/bin/env python
# -*- coding:utf-8 -*-
'''
# @Author = JasonZhou
# @File  : selectSort.py
# @Date  : 2018/8/3
'''

class SelcetSort(object):
    '''升序排列数组,选择排序法'''
    def __init__(self, array):
        assert array != None
        self.array = array
        self.array_len = len(array)

    def sort(self):
        for times in range(1, self.array_len):
            tmp = self.array[times - 1]
            for index in range(times, self.array_len):
                if self.array[index] < tmp:
                    index_tmp = index
                    tmp = self.array[index]

            self.array[index_tmp] = self.array[times-1]
            self.array[times-1] = tmp

    def show(self):
        print("Now the array is:"),
        for item in self.array:
            print(item),
        print("")

 

点赞