码迷,mamicode.com
首页 > 编程语言 > 详细

冒泡排序、简单选择排序、直接插入排序

时间:2015-04-03 13:15:56      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:

冒泡排序(Bubble Sort)的基本思想:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。时间复杂度为O(n2).

简单选择排序(Simple Selection Sort)的基本思想:通过n-i次关键字之间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换。应该说,尽管与冒泡排序同为O(n2), 但简单选择排序的性能上还是要略优于冒泡排序。

直接插入排序(Straight Insertion Sort)的基本思想:将一个记录插入到前面已经排序好的有序表中,从而得到一个新的、记录数不断加1的有序表。直接插入排序法的时间复杂度为O(n2) 。从这里也看出,同样的

O(n2)时间复杂度,直接插入排序法比冒炮和简单选择排序的性能要好一些。

 

  1 //冒泡排序、简单选择排序、直接插入排序
  2 #include "stdafx.h"
  3 
  4 #include "stdio.h" 
  5 #define TRUE 1 
  6 #define FALSE 0
  7 
  8 void bubblesort(int *list, int index);
  9 void selectsort(int *list, int index);
 10 void insertsort(int *list, int index);
 11 
 12 typedef int status;
 13 int list[20];    //默认最大长度为20
 14 int temp;
 15 int i, j;
 16 int node;
 17 status change = TRUE;
 18 
 19 void swap(int *list, int i, int j)//交换元素
 20 {
 21     temp = list[i];
 22     list[i] = list[j];
 23     list[j] = temp;
 24 }
 25 
 26 void main(void)
 27 {
 28     int index = 0;
 29     printf("Please input the value you want to sort(exit for 0):\n");
 30     scanf_s("%d", &node);
 31     while (node != 0)
 32     {
 33         list[index] = node;
 34         index += 1;
 35         scanf_s("%d", &node);
 36     }
 37     bubblesort(list, index);
 38     selectsort(list, index);
 39     insertsort(list, index);
 40 }
 41 
 42 void bubblesort(int *list, int index) //冒泡排序 时间复杂度O(n2)
 43 {
 44     for (j = 0; j<index && change; j++)
 45     {
 46         change = FALSE;
 47         for (i = 1; i<index - j; i++)
 48         {
 49             if (list[i - 1]>list[i])
 50             {
 51                 swap(list, i - 1, i);
 52                 change = TRUE;
 53             }
 54         }
 55     }
 56     printf("\n冒泡排序后为:");
 57     for (i = 0; i < index; i++)
 58     {
 59         printf("%d ", list[i]);
 60     }
 61 
 62 }
 63 
 64 void selectsort(int *list, int index)//简单选择排序  时间复杂度O(n2)
 65 {
 66     int min;
 67     for (i = 0; i < index - 1; i++)
 68     {
 69         min = i;
 70         for (j = i + 1; j < index; j++)
 71         {
 72             if (list[i]>list[j])
 73             {
 74                 min = j;
 75             }
 76             if (min != i)
 77             {
 78                 swap(list, min, i);
 79             }
 80         }
 81     }
 82     printf("\n简单选择排序后为:");
 83     for (i = 0; i < index; i++)
 84     {
 85         printf("%d ", list[i]);
 86     }
 87 }
 88 
 89 void insertsort(int *list, int index)//直接插入排序  时间复杂度O(n2)
 90 {
 91     for (i = 1; i < index; i++)
 92     {
 93         if (list[i - 1]>list[i])
 94         {
 95             temp = list[i];
 96             for (j = i; j >= 1 && list[j-1] > temp ;j--)
 97             {
 98                 list[j] = list[j - 1];
 99             }
100             list[j] = temp;
101         }
102     }
103     printf("\n直接插入排序后为:");
104     for (i = 0; i < index; i++)
105     {
106         printf("%d ", list[i]);
107     }
108 }

 

冒泡排序、简单选择排序、直接插入排序

标签:

原文地址:http://www.cnblogs.com/hhboboy/p/4389487.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!