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

原文地址:https://www.cnblogs.com/accipiter/p/2867198.html