Rand_Ar.h
#ifndef RAND_AR_H
#define RAND_AR_H
extern void Swap_Int(int* ap, int* bp);
extern bool Init_Ar(int* br, int n);
extern bool Init_Range_Ar(int* br, int n, int ran);
extern void Print_Ar(int* br, int n);
extern void BubbleSort(int* br, int n);
#endif
Rand_Ar.c
#include <stdbool.h>
#include <stdio.h>
#include <limits.h>
#include <assert.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
#include<malloc.h>
#include"Rand_Ar.h"
void Swap_Int(int* ap, int* bp)
{
assert(ap != NULL && bp != NULL);
int tmp = *ap;
*ap = *bp;
*bp = tmp;
}
int FindValue(const int* br, int n, int val)
{
assert(br != NULL);
if (n < 1) return -1;
int pos = n - 1;
while (pos >= 0 && br[pos] != val)
{
--pos;
}
return pos;
}
/*
bool Init_Ar_NotRepeat(int* br, int n)
{
assert(br != NULL);
if (n < 1) return false;
int* table;
table = (int*)malloc(n,sizeof(int));
int val = 0;
int i = 0;
while (i < n)
{
val = rand() % 100 + 1;
if (table[val] == 0)
{
br[i] = val;
i++;
table[val] = 1;
}
}
return true;
}
bool Init_Ar_NotRepeat(int* br, int n)
{
assert(br != NULL);
if (n < 1) return false;
int table[n + 1] = { 0 };
int val = 0;
int i = 0;
while (i < n)
{
val = rand() % 100 + 1;
if (table[val] == 0)
{
br[i] = val;
i++;
table[val] = 1;
}
}
return true;
}
*/
bool Init_Ar_NotRepeat(int* br, int n)
{
assert(br != NULL);
if (n < 1) return false;
int val = 0;
int i = 0;
while (i < n)
{
val = rand() % 100 + 1;
int pos = FindValue(br, i, val);
if (pos == -1)
{
br[i] = val;
i = i + 1;
}
}
return true;
}
bool Init_Range_Ar(int* br, int n, int ran)
{
assert(br != NULL); //终止程序, printf filename line
if (n < 1)return false;
for (int i = 0;i < n;++i) //Init_Ar
{
br[i] = rand() % ran + 1; //*(br+i),即br假如被传入的是空指针,而空地址不能进行解引用,会直接导致调用函数失败
}
return true;
}
bool Init_Ar(int* br, int n)
{
assert(br != NULL); //终止程序, printf filename line
if (n < 1)return false;
for (int i = 0;i < n;++i) //Init_Ar
{
br[i] = rand() % 100 + 1; //*(br+i),即br假如被传入的是空指针,而空地址不能进行解引用,会直接导致调用函数失败
}
return true;
}
void Print_Ar(int* br, int n)
{
assert(br != NULL);
for (int i = 0;i < n;++i)
{
printf("%5d", br[i]);
if ((i + 1) % 10 == 0)
{
printf("\n");
}
}
printf("\n");
}
void BubbleSort(int* br, int n)
{
assert(br != NULL);
if (n < 2) return;
for (int i = 1;i < n;++i)
{
bool tag = true;
for (int j = 0;j < n - 1;++j)
{
if (br[j] > br[j + 1])
{
Swap_Int(&br[j], &br[j + 1]);
tag = false;
}
}
if (tag)
{
break;
}
}
}
Hello.c
#include <stdbool.h>
#include <stdio.h>
#include <limits.h>
#include <assert.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
#include"Rand_Ar.h"
#define ARSIZE 100
#define _CRT_SECURE_NO_WARNINGS -1
int main()
{
int ar[ARSIZE] = { 0 };
//Init_Ar(ar, ARSIZE);
Init_Ar_NotRepeat(ar, ARSIZE);
Print_Ar(ar, ARSIZE);
BubbleSort(ar, ARSIZE);
Print_Ar(ar, ARSIZE);
return 0;
}