桶排序
整体思路:桶先排好序,再往桶里放数字,最后从头到尾依序输出
1 /* Version:0.1 2 Date:2017年1月2日 3 Author: 4 function:输入5个1000以内的数字,并排序 5 */ 6 7 #include <stdio.h> 8 #include <stdlib.h> 9 10 int main() 11 { 12 int a[1001], i, t; 13 14 //初始化数组 15 for(i=0; i<=1000; i++) 16 a[i] = 0; 17 18 // 循环读入5个数,并进行桶排序 19 for(i=1; i<=5; i++) 20 { 21 scanf("%d", &t); //把每一个数读到变量t中 22 a[t]++; //进行计数,对编号为t的桶放一个小旗子 23 } 24 25 for(i=0; i<=1000; i++) 26 for(t=1; t<=a[i]; t++) //出现了几次就将桶的编号打印几次 27 printf("%d ", i); 28 29 getchar();getchar(); 30 return 0; 31 }
时间复杂度
设:M 为桶的个数,N 为待排序数的个数
则:16行循环了 M 次,21行循环了 N 次,26和27行一共循环了 M+N 次,所以:时间复杂度为 O(2*(M+N)),即:O(M+N)