- 选择排序法
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("")