首页 > 其他 > 详细

知识点总结报告 1.26

时间:2018-01-28 10:02:35      阅读:167      评论:0      收藏:0      [点我收藏+]

知识点:排序

在C语言中,对一组数据进行排序有多种方法:交换排序、选择排序、冒泡排序、插入排序、归并排序、快速排序以及希尔排序等

其中冒泡排序和交换排序比较简单,交换排序是又是选择排序的基础。以下这个例子包含几种排序方法,以对分数降序排序为背景,使用链表,顺便填补对链表中数据排序的空白。

  1 #include <stdio.h>
  2 #include <malloc.h>
  3 #include <stdlib.h>
  4 struct link
  5 {
  6     int data;
  7     struct link *next;
  8 };
  9 void DisplayNode(int *pData,int n);
 10 struct link *AppendNode(struct link *head,int *pData);
 11 void ExchangeSort(int n,int *pData);
 12 void SelectionSort(int n,int *pData);
 13 void bubbleSort(int n,int *pData);
 14 void InsterSort(int n,int *pData);
 15 int main()
 16 {
 17     int n,i;
 18     int *pData=NULL;//定义一个基类型为整形的指针数组,用于指向节点数据域,方便排序
 19     struct link *head=NULL;
 20     printf("How many student?\n");
 21     scanf("%d",&n);
 22     pData=(int *)malloc(n*sizeof(int));
 23     for(i=0; i<n; i++)
 24     {
 25         printf("Input %d student‘s score\n",i+1);
 26         head=AppendNode(head,pData);
 27     }
 28     DisplayNode(pData,n);
 29     //ExchangeSort(n,pData);
 30     //SelectionSort(n,pData);
 31     //bubbleSort(n,pData);
 32     InsterSort(n,pData);
 33     DisplayNode(pData,n);
 34     return 0;
 35 }
 36 
 37 struct link *AppendNode(struct link *head,int *pData)
 38 {
 39     int i=1;
 40     int score;
 41     scanf(" %d",&score);
 42     struct link *p=NULL,*pr=head;
 43     p=(struct link *)malloc(sizeof(struct link));
 44     if(p==NULL)
 45     {
 46         printf("No enough memory\n");
 47         exit(0);
 48     }
 49     if(head==NULL)
 50     {
 51         head=p;
 52         p->data=score;
 53         p->next=NULL;
 54         pData[0]=p->data;
 55     }
 56     else
 57     {
 58         while(pr->next!=NULL)
 59         {
 60             pr=pr->next;
 61             i++;
 62         }
 63         pr->next=p;
 64         p->data=score;
 65         p->next=NULL;
 66         pData[i]=p->data;
 67     }
 68     return head;
 69 }
 70 
 71 void DisplayNode(int *pData,int n)
 72 {
 73     int i;
 74     for(i=0;i<n;i++)
 75     {
 76         printf("%4d",pData[i]);
 77     }
 78     printf("\n");
 79 }
 80 
 81 void ExchangeSort(int n,int *pData)
 82 {
 83     int i,j,temp,count=0;
 84     for(i=0;i<n-1;i++)
 85     {
 86         for(j=i+1;j<n;j++)
 87             if(pData[j]>pData[i])
 88         {
 89             temp=pData[i];
 90             pData[i]=pData[j];
 91             pData[j]=temp;
 92             count++;
 93         }
 94     }
 95     printf("\nExchange times:%d\n",count);
 96 }
 97 
 98 void SelectionSort(int n,int *pData)
 99 {
100     int i=0,j=0,k,temp=0,count=0;
101     for(i=0;i<n-1;i++)
102     {
103         k=i;
104         for(j=i+1;j<n;j++)
105         {
106             if(pData[k]<pData[j])
107                 k=j;
108         }
109         if(i!=k)
110         {
111             temp=pData[k];
112             pData[k]=pData[i];
113             pData[i]=temp;
114             count++;
115         }
116     }
117     printf("Selection times %d\n",count);
118 }
119 
120 void bubbleSort(int n,int *pData)
121 {
122     int i,j,temp=0;
123     for(i=0;i<n;i++)
124     {
125         for(j=i+1;j<n;j++)
126         {
127             if(pData[i]<pData[j])
128             {
129                 temp=pData[i];
130                 pData[i]=pData[j];
131                 pData[j]=temp;
132             }
133         }
134     }
135 }
136 
137 void InsterSort(int n,int *pData)
138 {
139     int i,j,k,temp=0;
140     for(i=0;i<n-1;i++)
141     {
142         k=i;
143         for(j=i+1;j>0;j--)
144         {
145             if(pData[j]<pData[k])
146             {
147                 temp=pData[i];
148                 pData[i]=pData[k];
149                 pData[k]=temp;
150             }
151             else
152             {
153                 break;
154             }
155         }
156     }
157 }

 

知识点总结报告 1.26

原文:https://www.cnblogs.com/desier/p/8367652.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!