选择排序
算法思想: 把待排序的数组看成已经排序好跟未排序的两个部分,每次我们去遍历找到未排序部分中值最小或最大的下标,跟已排序好的尾端进行一个交换操作,排序好的部分 +1。遍历 n 次,我们就把整个数组排序完毕。
给一个数组我们模拟一次:
5 1 2 5 34 53 142 24 (第一次 待排序的数据为 n,已经排序好的为 0) |
---|
1 5 2 5 34 53 142 24 (第二次 选择最小数的下标,跟已经排序好的末尾交换) |
1 2 5 5 34 53 142 24 (第二次 继续从待排序中选择最小数的下标,跟已经排序好的末尾交换) |
… |
1 2 5 5 24 34 53 142 |
直观排序情况如上所示,现在我们代码实现一遍
void selectionSort( int arr[], int n ){
if( n <= 1 ){
return ;
}
for( int idx = 0; idx < n - 1; ++ idx ){
int minIdx = idx;
for( int jdx = idx + 1; jdx < n; ++ jdx ){
minIdx = arr[jdx] < arr[minIdx] ? jdx : minIdx;
}
swap( arr[idx], arr[minIdx] );
}
}