概念
选择排序:从排序的记录中选择出关键字最小的记录,顺序放在已排好的子文件的后面
常用的方法
直接选择法 、 堆排序
直接排序的思想:n 个记录的文件的直接选择排序需要经过n-1次直接排序所得出结果
void SelectSort(int *arr, int len) { int i,j; // 为循环做准 int iMin; // 存储每次最小值 int temp; // 作为临时存储值 for (i=0; i<len-1; i++) // 进行len-1趟比较即可 { iMin = i; // 存储每次最小值 for (j=i+1; j<len; j++) // 第i次需要与之比较的数据 { if (arr[iMin]>arr[j]) { iMin = j; // 记录最小值的位置 } } temp = arr[i]; // 交换 arr[i] = arr[iMin]; arr[iMin] = temp; } }
直接排序的核心:确定待排序的的数据 、确定比较的数据、找出最小值、进行交换
直接排序的算法性能分析
直接选择排序和直接插入排序类似,都分为无序区、有序区、 区别:直接插入排序是将无序区的第一个元素直接插入到有序区;直接选择排序 把最小的元素放到最后
例子
void Selectsort(int a[], int n) { int i, j, nMinIndex; for (i = 0; i < n; i++) { nMinIndex = i; //找最小元素的位置 for (j = i + 1; j < n; j++) if (a[j] < a[nMinIndex]) nMinIndex = j; Swap(a[i], a[nMinIndex]); //将这个元素放到无序区的开头 } }