排序算法二——选择排序

来源:互联网 发布:mac恢复垃圾箱删除文件 编辑:程序博客网 时间:2024/05/21 05:18

**

排序算法二:选择排序

**
**跟冒泡一样,选择排序同样是最简单,最常用的排序方法之一。
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)
所以,选择排序是不稳定的排序。平均时间复杂度O(n^2)。**
这里写图片描述

选择排序代码:

/*****************************************************     File name:xuan_ze.c Author: Tang Zhiqian  Date:2017-08-07 16:37*****************************************************//* 选择排序*/#include <stdio.h>#define MAX 10void swap(int arr[],int i,int j);void print(int arr[]);int main(){    int arr[MAX] = {9,1,2,3,4,5,6,7,8,0};    int i,j,min;    printf("排序前:\n");    for (i = 0; i < MAX; i++)    {        printf("%d ",arr[i]);    }    printf("\n");    printf("选择排序后:\n");    for (i = 0; i < MAX - 1; i++)    {        min = i;   //设min为第一个数的下标        for (j = i + 1; j < MAX; j++)        {            if (arr[j] < arr[min])            {                min = j;            }        }        if (i != min)    //判断,如果最小值还是i,则不需要swap        {            swap(arr,i,min);            print(arr);        }    }//  print(arr);    return 0;}void swap(int arr[],int i,int j){    int temp;    temp = arr[i];    arr[i] = arr[j];    arr[j] = temp;}void print(int arr[]){    int i;    for (i = 0; i < MAX; i++)    {        printf("%d ",arr[i]);    }    printf("\n");}

程序运行结果:

这里写图片描述

很简单,自己看!