选择排序
思想:
从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了
c++:
#include <iostream>
using namespace std;
void SelectionSort( int *a,int size)
{
for(int i = 0; i < size-1; i++)
{
int min_num = a[i];
int min_index = i;
for(int j = i+1; j < size; j++)
{
if(a[j] < min_num)
{
min_num = a[j];
min_index = j;
}
}
if(min_index != i)
{
a[min_index] = a[i];
a[i] = min_num;
}
}
}
int main()
{
int arr[6] = {22,3,1,44,3,9};
SelectionSort(arr,6);
for(int i = 0; i < 6; i++ )
cout << arr[i] << " ";
return 0;
}
突然发现,java中arraylist很好用。
package test;
import java.util.ArrayList;
public class test {
public static void SelectionSort(ArrayList<Integer> a){
for(int i = 0; i < a.size()-1;i++){
int min_num = a.get(i);
int min_index = i;
for(int j = i+1; j < a.size();j++){
if(a.get(j) < min_num){
min_num = a.get(j);
min_index = j;
}
}
if(min_index != i){
a.set(min_index, a.get(i));
a.set(i, min_num);
}
}
}
public static void main(String[]args){
ArrayList<Integer> arr = new ArrayList<Integer>();
for(int i = 0; i < 20; i++){
int num = (int) (Math.random()*100);
arr.add(num);
}
SelectionSort(arr);
for(int i = 0; i < arr.size();i++)
System.out.print(arr.get(i) + " ");
}
}
选择排序是一个不稳定的排序算法:
例如:
4,3,4,4,3,1
第一次交换,4的相对位置就变了。
选择排序时间复杂度为O(N^2);

浙公网安备 33010602011771号