选择排序跟冒泡排序的比较

来源:互联网 发布:情到浓时方知爱gl 编辑:程序博客网 时间:2024/05/18 03:14

/*时间复杂度
选择排序:比较次数O(n^2)总的比较次数N=(n-1)+(n-2)+…+1=n*(n-1)/2。交换次数O(n),最好情况是,已经有序,交换0次;最坏情况交换n-1次,逆序交换n/2次。交换次数比冒泡排序少多了,由于交需CPU时间比比较所需的CPU时间多,n值较小时,选择排序比冒泡排序快。

冒泡排序:若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数为n-1,交换次数为0,所以,冒泡排序最好的时间复杂度为O(n); 若初始文件是反序的,需要进行趟排序。每趟排序要进行次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值:C = n*(n-1)/2 M = 3n*(n-1)/2。
*/

#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <stdbool.h>//选择排序,找出每一轮最小元素放在本轮开头位置 void SelectSort(int arr[], int length){    int tmp, i, j;    for(i = 0; i < length-1; i++)    {        for(j = i+1; j < length; j++)        {            if(arr[i] > arr[j])            {                tmp = arr[i];                arr[i] = arr[j];                arr[j] = tmp;            }        }    }     /* 优化后的选择排序算法     for(i = 0; i < length-1; i++)//length个元素需要比较length-1轮     {        int index = i;//假设index为每轮比较后最小的元素下标 ,初始值为每轮第一个元素         for(j = i+1; j < length; j++)         {            if(arr[j] < arr[index])//index代表一局内最小的那个                 index = j;        }        if(index != i)        {            tmp = arr[index];            arr[index] = arr[i];            arr[i] = tmp;        }    } */}//冒泡排序,每次找到轮内最大的放在本轮的最后位置 void BubbleSort(int arr[], int length){    int i, j, tmp;    for(i = 0; i < length-1; i++)    {        for(j = 0; j < length-1-i; j++)        {            if(arr[j] > arr [j+1])            {                tmp = arr[j];                arr[j] = arr[j+1];                arr[j+1] = tmp;            }        }    }    /*冒泡排序的优化    bool flag = true;     for(i = 0; i < length-1 && flag; i++)    {        flag = false;        for(j = 0; j < length-1-i; j++)        {            if(arr[j] > arr [j+1])            {                tmp = arr[j];                arr[j] = arr[j+1];                arr[j+1] = tmp;                flag = true;            }        }    }    */} void main(){    int arr[8] = {2,8,5,3,4,7,9,10};    int i;    for(i = 0; i < 8; i++)    {        printf("%d ", arr[i]);    }    printf("\n");    BubbleSort(arr, 8);    for(i = 0; i < 8; i++)    {        printf("%d ", arr[i]);    }    printf("\n");}
0 0
原创粉丝点击