选择排序

思想:

从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了

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);

posted @ 2016-09-07 15:56  prog123  阅读(148)  评论(0编辑  收藏  举报