C语言排序之选择排序(一)

  今天主要写了点C的排序,现在想来,语言啥的都如浮云,当然能够做到最简单是最好的,比如用C++可以搞成模板,就省得写一大堆相似的东西,就是一个比较爽的事情,不过有些时候“高级”语言都让我们懒得去思考了,实在是没劲,还是思想重要,最近又对数学和算法充满了兴趣!越发觉得计算机或者带有“智能”系列的东西的神奇了,爽啊。不吐槽了,上今天的代码吧。

 1 /*rand()*/

 2 #include <stdlib.h>

 3 /********************  4 int rand(void)  5 void srand(unsigned int);  6 *********************/

 7 #include <time.h>/*time(NULL)*/

 8 #include <stdio.h>

 9 /*直接插入排序*/

10 void insort(int s[] , int n); 11 /*希尔排序,就是将直接排序的增量分成若干组,相同的放一组,组内直接插入*/

12 void shellsort(int s[] , int n); 13 int main() 14 { 15     int num[10],i=0; 16  srand(time(NULL)); 17     for(;i<10;i++) 18  { 19         num[i] = rand()%100; 20  } 21     //insort(num,10);

22     shellsort(num , 10); 23     for(i=0;i<10;i++) 24  { 25         printf("%d\n",num[i]); 26  } 27     return 0; 28 } 29 /*直接插入法是指对一个新数组重新一个个插入数据,小->大*/

30 void insort(int s[],int n) 31 { 32     int i,j,key; 33     /*key为监视,保存数据,1个数据不用比较*/

34     for(i=1;i < n;i++) 35  { 36         key = s[i]; 37         j = i-1; 38         while(key<s[j]&&j>=0) 39  { 40             s[j+1] = s[j];/*数据右移*/

41             j--; 42  } 43         s[j+1] = key; 44  } 45 } 46 /*希尔排序,选择就用希尔!*/

47 void shellsort(int s[] , int n) 48 { 49     int i , j ,d,key; 50     d = n/2; 51     while(d>=1) 52  { 53         for(i = d ; i<n ; i++) 54  { 55             key = s[i]; 56             j = i -d; 57             while(key < s[j]&&j>=0) 58  { 59                 s[j+d] = s[j]; 60                 j = j-d; 61  } 62             s[j+d] = key; 63  } 64         d = d/2; 65  } 66 }

 

2013-01-19

 

 

 

你可能感兴趣的:(选择排序)