数据结构(2)

来源:互联网 发布:c语言调用exit 编辑:程序博客网 时间:2024/05/16 00:27

最近在看Data Structures and Algorithm Analysis in C, Second Edition这本书,就把我自己的代码放在这儿

书的第一章中间给了两个引例,就是如何求出一组数据中的第k个数据,给了两种idea,我实现如下,可能比较笨重

第一个最简单的排序,给出:

#include <stdio.h>#include <stdlib.h>#include <time.h>void sort(int a[],int number){int i,j,temp;for (i=0;i<number-1;i++){for (j=i;j<number;j++){if (a[i]<a[j]){temp = a[i];a[i] = a[j];a[j] = temp;}}}}void show(int a[]){int i;for (i=0;i<10;i++){printf("%d\t",a[i]);}}int main(){srand(time(NULL));int i;int k;int a[10];for (i=0;i<10;i++){a[i] = rand()%100;}printf("before sorting:\n");show(a);printf("please input a number u want to check:");scanf("%d",&k);sort(a,10);printf("after sorting:\n");show(a);printf("the check number is %d\n",a[k-1]);system("pause");return 0;}

过程很简单,不给出解释

下面给出第二种方法,就是对该组数据的前k个数据进行排序后,然后把后面的数据一个一个的接纳进来,也就是插入排序,每进来一个就出去一个,最后一个就是我们要求的数据,代码如下:

#include <stdio.h>#include <stdlib.h>#include <time.h>#include <malloc.h>int rand_number(){return rand()%100;}void show(int a[],int number){int i;for (i=0;i<number;i++){printf("%d\t",a[i]);}printf("\n");}void sort(int a[],int number){int i,j,temp;for (i=0;i<number-1;i++){for (j=i;j<number;j++){if (a[i]<a[j]){temp = a[i];a[i] = a[j];a[j] = temp;}}}}int main(){srand(time(NULL));int number,i,k,j,p;printf("please input a number:\n");scanf("%d",&number);printf("please input a k_number:\n");scanf("%d",&k);int *a = (int *)malloc(sizeof(int)*number);int *b = (int *)malloc(sizeof(int)*k);for (i=0;i<number;i++){a[i] = rand_number();}printf("the array A is:\n");show(a,number);for (j=0;j<k;j++){b[j] = a[j];}printf("before sorting array B is:\n");show(b,k);sort(b,k);printf("after sorting array B is:\n");show(b,k);for (int i=k;i<number;i++){if (a[i]<=b[k-1])continue;else{for (j=0;j<k;j++){if (a[i]>b[j]){for (p=k-1;p>j;p--)b[p] = b[p-1];b[j] = a[i];break;}}show(b,k);}}system("pause");return 0;}
写的有点乱,我把插入的过程打印出来了!


0 0