问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求C语言常用和基本结构类型

发布网友 发布时间:2022-04-29 17:15

我来回答

3个回答

热心网友 时间:2023-10-22 16:13

#include"stdio.h"
#include"malloc.h"
#include"math.h"
#define MAXSIZE 20

typedef struct{
int key; //关键字项
}redtype;

typedef struct{
redtype r[MAXSIZE+1];
int length; //顺序表长度
}sqlist; //顺序表类型

/* 直接插入 */
void insertsort(sqlist &L){
int i,j;
for(i=2;i<=L.length;++i)
if(L.r[i].key < L.r[i-1].key){
L.r[0] = L.r[i];
L.r[i] = L.r[i-1];
for(j=i-2;L.r[0].key < L.r[j].key;--j)
L.r[j + 1] = L.r[j] ;
L.r[j+1] = L.r[0];
}
for(i=1; i < L.length+1; i++)
printf("%d,",L.r[i].key);
}

/* 折半插入 */
void binsertsort(sqlist &L){
int low,m,high,i,j;
for(i=2;i<=L.length;++i){
L.r[0] = L.r[i];
low=1; high=i-1;
while(low <= high){
m = (low+high)/2;
if(L.r[0].key < L.r[m].key)
high = m-1;
else low = m+1;
}
for(j=i-1;j>=high+1;--j)
L.r[j+1] = L.r[j];
L.r[high+1] = L.r[0];
}
for(i=1; i < L.length+1; i++)
printf("%d,",L.r[i].key);
}

/* 希尔排序 */
void shellinsert(sqlist &L,int d){
int i,j;
for(i=d+1;i<=L.length;++i)
if(L.r[i].key < L.r[i-d].key){
L.r[0] = L.r[i];
for(j=i-d;j>0 && L.r[0].key<L.r[j].key;j=j-d)
L.r[j+d] = L.r[j];
L.r[j+d] = L.r[0];
}
}
void shellsort(sqlist &L,int dl[],int t){
int k,i;
for(k=0;k<t;++k)
shellinsert(L,dl[k]);
for(i=1; i < L.length+1; i++)
printf("%d,",L.r[i].key);
}

/* 冒泡排序 */
void bubble(sqlist &L){
int i,j;
for(j=0;j<L.length;++j)
for(i=1;i<L.length-j;++i)
if(L.r[i].key > L.r[i+1].key){
L.r[0] = L.r[i];
L.r[i] = L.r[i+1];
L.r[i+1] = L.r[0];
}
for(i=1; i < L.length+1; i++)
printf("%d,",L.r[i].key);
}

/* 快速排序 */
int partition(sqlist &L,int low,int high){
int pivotkey;
L.r[0] = L.r[low];
pivotkey = L.r[low].key;
while(low<high){
while(low<high && L.r[high].key>=pivotkey) --high;
L.r[low].key = L.r[high].key;
while(low<high && L.r[low].key<=pivotkey) ++low;
L.r[high].key = L.r[low].key;
}
L.r[low] = L.r[0];
return low;
}
void qsort(sqlist &L,int low,int high){
int pivotloc,i;
if(low < high){
pivotloc = partition(L,low,high);
qsort(L,low,pivotloc-1);
qsort(L,pivotloc+1,high);
}
}

/* 简单选择排序 */
void selectsort(sqlist &L){
int i,j,k,temp;
for(i=1; i<L.length; ++i){
k = i;
for(j = i+1;j <= L.length; ++j)
{
if(L.r[k].key > L.r[j].key)
k = j;
}
if(k != i){
temp = L.r[i].key;
L.r[i].key = L.r[k].key;
L.r[k].key = temp;
}
}
}

/* 堆排序 */
void heapajust(sqlist &L,int s,int m){
int j,temp;
temp = L.r[s].key;
for(j=2*s; j<=m; j*=2){
if(j<m && L.r[j].key<L.r[j+1].key) ++j;
if(temp > L.r[j].key) break;
L.r[s].key = L.r[j].key; s = j;
}
L.r[s].key = temp;
}
void heapsort(sqlist &L){
int i,temp;
for(i=L.length/2; i>0; --i)
heapajust(L,i,L.length);
for(i=L.length; i>1; --i)
{ temp = L.r[1].key;
L.r[1].key = L.r[i].key;
L.r[i].key = temp;
heapajust(L,1,i-1);
}
}

/* 归并排序 */
void merge(sqlist S,sqlist &T,int i,int m,int n){
int j,k;
for(j=m+1, k=i; i<=m && j<=n; ++k){
if(S.r[i].key < S.r[j].key)
T.r[k].key = S.r[i++].key;
else T.r[k].key = S.r[j++].key;
}
while(i <= m) T.r[k++].key = S.r[i++].key;
while(j <= n) T.r[k++].key = S.r[j++].key;
}
void msort(sqlist S,sqlist &T1,int l,int h){
int m;
sqlist T2;
if(l == h) T1.r[l].key = S.r[l].key;
else{
m = (l+h)/2;
msort(S,T2,l,m);
msort(S,T2,m+1,h);
merge(T2,T1,l,m,h);
}
}
void mergesort(sqlist &L){
msort(L,L,1,L.length);
}

/* 基数排序 */
void radixsort(sqlist &L){
int i,j,k,p,q,m;
int f[10][10];
printf("输入的数中最多为几位?");
scanf("%d",&m);
for(j=m; j>0; --j){
for(p=0; p<10; p++)
for(q=0; q<L.length; q++)
f[p][q] = 0; //将数组每位都置0
for(i=1; i<=L.length; ++i){
k = L.r[i].key/(int(pow(10,m-j)))%10;
p = 0; q = 0;
while(p != k) p++;
while(f[p][q] != 0) q++;
f[p][q] = L.r[i].key;
}
i = 1;
for(p=0; p<10; p++)
for(q=0; f[p][q] != 0; q++)
{ L.r[i].key = f[p][q]; i++; }
}
}

void main()
{ sqlist L;
int a,b,n,t;
int dl[10];
printf("Please input the length :") ;
scanf("%d",&L.length);
for(n=1; n < L.length+1; n++)
scanf("%d",&L.r[n].key);
b = 1;
while(b == 1){
printf("\n1.直接插入排序.\n2.折半插入排序.\n3.希尔排序\n4.冒泡排序\n5.快速排序\n6.简单选择排序.\n7.堆排序.\n8.归并排序\n9.基数排序.\n0.退出.\n请选择:");
scanf("%d",&a);
switch(a){
case 1: { printf("直接插入排序结果:");
insertsort(L);
printf("\n");
break; }
case 2: { printf("折半插入排序结果:");
binsertsort(L);
printf("\n");
break; }
case 3: {
printf("请输入希尔排序的基数个数:t = ");
scanf("%d",&t);
printf("\n输入希尔排序的基数:");
for(n=0;n<t;n++)
scanf("%d",&dl[n]);
printf("\n希尔排序结果:");
shellsort(L,dl,t);
printf("\n");
break;
}
case 4: { printf("冒泡排序结果:");
bubble(L);
printf("\n");
break; }
case 5: { printf("快速排序结果:");
qsort(L,1,L.length);
for(n=1; n < L.length+1; n++)
printf("%d,",L.r[n].key);
printf("\n");
break; }
case 6: { printf("简单选择排序结果:");
selectsort(L);
for(n=1; n < L.length+1; n++)
printf("%d,",L.r[n].key);
printf("\n");
break; }
case 7: { printf("堆排序结果:");
heapsort(L);
for(n=1; n < L.length+1; n++)
printf("%d,",L.r[n].key);
printf("\n");
break; }
case 8: { printf("归并排序结果:");
mergesort(L);
for(n=1; n < L.length+1; n++)
printf("%d,",L.r[n].key);
printf("\n");
break; }
case 9: { radixsort(L);
printf("基数排序结果:");
for(n=1; n < L.length+1; n++)
printf("%d,",L.r[n].key);
printf("\n");
break; }
case 0: b = 0; break;
}
}
}

这是基本的几种算法,其他的应该不难。

热心网友 时间:2023-10-22 16:13

#include"stdio.h"
#include"malloc.h"
#include"math.h"
#define MAXSIZE 20

typedef struct{
int key; //关键字项
}redtype;

typedef struct{
redtype r[MAXSIZE+1];
int length; //顺序表长度
}sqlist; //顺序表类型

/* 直接插入 */
void insertsort(sqlist &L){
int i,j;
for(i=2;i<=L.length;++i)
if(L.r[i].key < L.r[i-1].key){
L.r[0] = L.r[i];
L.r[i] = L.r[i-1];
for(j=i-2;L.r[0].key < L.r[j].key;--j)
L.r[j + 1] = L.r[j] ;
L.r[j+1] = L.r[0];
}
for(i=1; i < L.length+1; i++)
printf("%d,",L.r[i].key);
}

/* 折半插入 */
void binsertsort(sqlist &L){
int low,m,high,i,j;
for(i=2;i<=L.length;++i){
L.r[0] = L.r[i];
low=1; high=i-1;
while(low <= high){
m = (low+high)/2;
if(L.r[0].key < L.r[m].key)
high = m-1;
else low = m+1;
}
for(j=i-1;j>=high+1;--j)
L.r[j+1] = L.r[j];
L.r[high+1] = L.r[0];
}
for(i=1; i < L.length+1; i++)
printf("%d,",L.r[i].key);
}

/* 希尔排序 */
void shellinsert(sqlist &L,int d){
int i,j;
for(i=d+1;i<=L.length;++i)
if(L.r[i].key < L.r[i-d].key){
L.r[0] = L.r[i];
for(j=i-d;j>0 && L.r[0].key<L.r[j].key;j=j-d)
L.r[j+d] = L.r[j];
L.r[j+d] = L.r[0];
}
}
void shellsort(sqlist &L,int dl[],int t){
int k,i;
for(k=0;k<t;++k)
shellinsert(L,dl[k]);
for(i=1; i < L.length+1; i++)
printf("%d,",L.r[i].key);
}

/* 冒泡排序 */
void bubble(sqlist &L){
int i,j;
for(j=0;j<L.length;++j)
for(i=1;i<L.length-j;++i)
if(L.r[i].key > L.r[i+1].key){
L.r[0] = L.r[i];
L.r[i] = L.r[i+1];
L.r[i+1] = L.r[0];
}
for(i=1; i < L.length+1; i++)
printf("%d,",L.r[i].key);
}

/* 快速排序 */
int partition(sqlist &L,int low,int high){
int pivotkey;
L.r[0] = L.r[low];
pivotkey = L.r[low].key;
while(low<high){
while(low<high && L.r[high].key>=pivotkey) --high;
L.r[low].key = L.r[high].key;
while(low<high && L.r[low].key<=pivotkey) ++low;
L.r[high].key = L.r[low].key;
}
L.r[low] = L.r[0];
return low;
}
void qsort(sqlist &L,int low,int high){
int pivotloc,i;
if(low < high){
pivotloc = partition(L,low,high);
qsort(L,low,pivotloc-1);
qsort(L,pivotloc+1,high);
}
}

/* 简单选择排序 */
void selectsort(sqlist &L){
int i,j,k,temp;
for(i=1; i<L.length; ++i){
k = i;
for(j = i+1;j <= L.length; ++j)
{
if(L.r[k].key > L.r[j].key)
k = j;
}
if(k != i){
temp = L.r[i].key;
L.r[i].key = L.r[k].key;
L.r[k].key = temp;
}
}
}

/* 堆排序 */
void heapajust(sqlist &L,int s,int m){
int j,temp;
temp = L.r[s].key;
for(j=2*s; j<=m; j*=2){
if(j<m && L.r[j].key<L.r[j+1].key) ++j;
if(temp > L.r[j].key) break;
L.r[s].key = L.r[j].key; s = j;
}
L.r[s].key = temp;
}
void heapsort(sqlist &L){
int i,temp;
for(i=L.length/2; i>0; --i)
heapajust(L,i,L.length);
for(i=L.length; i>1; --i)
{ temp = L.r[1].key;
L.r[1].key = L.r[i].key;
L.r[i].key = temp;
heapajust(L,1,i-1);
}
}

/* 归并排序 */
void merge(sqlist S,sqlist &T,int i,int m,int n){
int j,k;
for(j=m+1, k=i; i<=m && j<=n; ++k){
if(S.r[i].key < S.r[j].key)
T.r[k].key = S.r[i++].key;
else T.r[k].key = S.r[j++].key;
}
while(i <= m) T.r[k++].key = S.r[i++].key;
while(j <= n) T.r[k++].key = S.r[j++].key;
}
void msort(sqlist S,sqlist &T1,int l,int h){
int m;
sqlist T2;
if(l == h) T1.r[l].key = S.r[l].key;
else{
m = (l+h)/2;
msort(S,T2,l,m);
msort(S,T2,m+1,h);
merge(T2,T1,l,m,h);
}
}
void mergesort(sqlist &L){
msort(L,L,1,L.length);
}

/* 基数排序 */
void radixsort(sqlist &L){
int i,j,k,p,q,m;
int f[10][10];
printf("输入的数中最多为几位?");
scanf("%d",&m);
for(j=m; j>0; --j){
for(p=0; p<10; p++)
for(q=0; q<L.length; q++)
f[p][q] = 0; //将数组每位都置0
for(i=1; i<=L.length; ++i){
k = L.r[i].key/(int(pow(10,m-j)))%10;
p = 0; q = 0;
while(p != k) p++;
while(f[p][q] != 0) q++;
f[p][q] = L.r[i].key;
}
i = 1;
for(p=0; p<10; p++)
for(q=0; f[p][q] != 0; q++)
{ L.r[i].key = f[p][q]; i++; }
}
}

void main()
{ sqlist L;
int a,b,n,t;
int dl[10];
printf("Please input the length :") ;
scanf("%d",&L.length);
for(n=1; n < L.length+1; n++)
scanf("%d",&L.r[n].key);
b = 1;
while(b == 1){
printf("\n1.直接插入排序.\n2.折半插入排序.\n3.希尔排序\n4.冒泡排序\n5.快速排序\n6.简单选择排序.\n7.堆排序.\n8.归并排序\n9.基数排序.\n0.退出.\n请选择:");
scanf("%d",&a);
switch(a){
case 1: { printf("直接插入排序结果:");
insertsort(L);
printf("\n");
break; }
case 2: { printf("折半插入排序结果:");
binsertsort(L);
printf("\n");
break; }
case 3: {
printf("请输入希尔排序的基数个数:t = ");
scanf("%d",&t);
printf("\n输入希尔排序的基数:");
for(n=0;n<t;n++)
scanf("%d",&dl[n]);
printf("\n希尔排序结果:");
shellsort(L,dl,t);
printf("\n");
break;
}
case 4: { printf("冒泡排序结果:");
bubble(L);
printf("\n");
break; }
case 5: { printf("快速排序结果:");
qsort(L,1,L.length);
for(n=1; n < L.length+1; n++)
printf("%d,",L.r[n].key);
printf("\n");
break; }
case 6: { printf("简单选择排序结果:");
selectsort(L);
for(n=1; n < L.length+1; n++)
printf("%d,",L.r[n].key);
printf("\n");
break; }
case 7: { printf("堆排序结果:");
heapsort(L);
for(n=1; n < L.length+1; n++)
printf("%d,",L.r[n].key);
printf("\n");
break; }
case 8: { printf("归并排序结果:");
mergesort(L);
for(n=1; n < L.length+1; n++)
printf("%d,",L.r[n].key);
printf("\n");
break; }
case 9: { radixsort(L);
printf("基数排序结果:");
for(n=1; n < L.length+1; n++)
printf("%d,",L.r[n].key);
printf("\n");
break; }
case 0: b = 0; break;
}
}
}

这是基本的几种算法,其他的应该不难。

热心网友 时间:2023-10-22 16:14

一次要求太多
还乱。

热心网友 时间:2023-10-22 16:14

在刚学c语言的时候,int
float
double
char
这几个是比较常用的类型,另外可能自己定义结构体来扩充类型

热心网友 时间:2023-10-22 16:14

一次要求太多
还乱。

热心网友 时间:2023-10-22 16:14

在刚学c语言的时候,int
float
double
char
这几个是比较常用的类型,另外可能自己定义结构体来扩充类型

热心网友 时间:2023-10-22 16:13

#include"stdio.h"
#include"malloc.h"
#include"math.h"
#define MAXSIZE 20

typedef struct{
int key; //关键字项
}redtype;

typedef struct{
redtype r[MAXSIZE+1];
int length; //顺序表长度
}sqlist; //顺序表类型

/* 直接插入 */
void insertsort(sqlist &L){
int i,j;
for(i=2;i<=L.length;++i)
if(L.r[i].key < L.r[i-1].key){
L.r[0] = L.r[i];
L.r[i] = L.r[i-1];
for(j=i-2;L.r[0].key < L.r[j].key;--j)
L.r[j + 1] = L.r[j] ;
L.r[j+1] = L.r[0];
}
for(i=1; i < L.length+1; i++)
printf("%d,",L.r[i].key);
}

/* 折半插入 */
void binsertsort(sqlist &L){
int low,m,high,i,j;
for(i=2;i<=L.length;++i){
L.r[0] = L.r[i];
low=1; high=i-1;
while(low <= high){
m = (low+high)/2;
if(L.r[0].key < L.r[m].key)
high = m-1;
else low = m+1;
}
for(j=i-1;j>=high+1;--j)
L.r[j+1] = L.r[j];
L.r[high+1] = L.r[0];
}
for(i=1; i < L.length+1; i++)
printf("%d,",L.r[i].key);
}

/* 希尔排序 */
void shellinsert(sqlist &L,int d){
int i,j;
for(i=d+1;i<=L.length;++i)
if(L.r[i].key < L.r[i-d].key){
L.r[0] = L.r[i];
for(j=i-d;j>0 && L.r[0].key<L.r[j].key;j=j-d)
L.r[j+d] = L.r[j];
L.r[j+d] = L.r[0];
}
}
void shellsort(sqlist &L,int dl[],int t){
int k,i;
for(k=0;k<t;++k)
shellinsert(L,dl[k]);
for(i=1; i < L.length+1; i++)
printf("%d,",L.r[i].key);
}

/* 冒泡排序 */
void bubble(sqlist &L){
int i,j;
for(j=0;j<L.length;++j)
for(i=1;i<L.length-j;++i)
if(L.r[i].key > L.r[i+1].key){
L.r[0] = L.r[i];
L.r[i] = L.r[i+1];
L.r[i+1] = L.r[0];
}
for(i=1; i < L.length+1; i++)
printf("%d,",L.r[i].key);
}

/* 快速排序 */
int partition(sqlist &L,int low,int high){
int pivotkey;
L.r[0] = L.r[low];
pivotkey = L.r[low].key;
while(low<high){
while(low<high && L.r[high].key>=pivotkey) --high;
L.r[low].key = L.r[high].key;
while(low<high && L.r[low].key<=pivotkey) ++low;
L.r[high].key = L.r[low].key;
}
L.r[low] = L.r[0];
return low;
}
void qsort(sqlist &L,int low,int high){
int pivotloc,i;
if(low < high){
pivotloc = partition(L,low,high);
qsort(L,low,pivotloc-1);
qsort(L,pivotloc+1,high);
}
}

/* 简单选择排序 */
void selectsort(sqlist &L){
int i,j,k,temp;
for(i=1; i<L.length; ++i){
k = i;
for(j = i+1;j <= L.length; ++j)
{
if(L.r[k].key > L.r[j].key)
k = j;
}
if(k != i){
temp = L.r[i].key;
L.r[i].key = L.r[k].key;
L.r[k].key = temp;
}
}
}

/* 堆排序 */
void heapajust(sqlist &L,int s,int m){
int j,temp;
temp = L.r[s].key;
for(j=2*s; j<=m; j*=2){
if(j<m && L.r[j].key<L.r[j+1].key) ++j;
if(temp > L.r[j].key) break;
L.r[s].key = L.r[j].key; s = j;
}
L.r[s].key = temp;
}
void heapsort(sqlist &L){
int i,temp;
for(i=L.length/2; i>0; --i)
heapajust(L,i,L.length);
for(i=L.length; i>1; --i)
{ temp = L.r[1].key;
L.r[1].key = L.r[i].key;
L.r[i].key = temp;
heapajust(L,1,i-1);
}
}

/* 归并排序 */
void merge(sqlist S,sqlist &T,int i,int m,int n){
int j,k;
for(j=m+1, k=i; i<=m && j<=n; ++k){
if(S.r[i].key < S.r[j].key)
T.r[k].key = S.r[i++].key;
else T.r[k].key = S.r[j++].key;
}
while(i <= m) T.r[k++].key = S.r[i++].key;
while(j <= n) T.r[k++].key = S.r[j++].key;
}
void msort(sqlist S,sqlist &T1,int l,int h){
int m;
sqlist T2;
if(l == h) T1.r[l].key = S.r[l].key;
else{
m = (l+h)/2;
msort(S,T2,l,m);
msort(S,T2,m+1,h);
merge(T2,T1,l,m,h);
}
}
void mergesort(sqlist &L){
msort(L,L,1,L.length);
}

/* 基数排序 */
void radixsort(sqlist &L){
int i,j,k,p,q,m;
int f[10][10];
printf("输入的数中最多为几位?");
scanf("%d",&m);
for(j=m; j>0; --j){
for(p=0; p<10; p++)
for(q=0; q<L.length; q++)
f[p][q] = 0; //将数组每位都置0
for(i=1; i<=L.length; ++i){
k = L.r[i].key/(int(pow(10,m-j)))%10;
p = 0; q = 0;
while(p != k) p++;
while(f[p][q] != 0) q++;
f[p][q] = L.r[i].key;
}
i = 1;
for(p=0; p<10; p++)
for(q=0; f[p][q] != 0; q++)
{ L.r[i].key = f[p][q]; i++; }
}
}

void main()
{ sqlist L;
int a,b,n,t;
int dl[10];
printf("Please input the length :") ;
scanf("%d",&L.length);
for(n=1; n < L.length+1; n++)
scanf("%d",&L.r[n].key);
b = 1;
while(b == 1){
printf("\n1.直接插入排序.\n2.折半插入排序.\n3.希尔排序\n4.冒泡排序\n5.快速排序\n6.简单选择排序.\n7.堆排序.\n8.归并排序\n9.基数排序.\n0.退出.\n请选择:");
scanf("%d",&a);
switch(a){
case 1: { printf("直接插入排序结果:");
insertsort(L);
printf("\n");
break; }
case 2: { printf("折半插入排序结果:");
binsertsort(L);
printf("\n");
break; }
case 3: {
printf("请输入希尔排序的基数个数:t = ");
scanf("%d",&t);
printf("\n输入希尔排序的基数:");
for(n=0;n<t;n++)
scanf("%d",&dl[n]);
printf("\n希尔排序结果:");
shellsort(L,dl,t);
printf("\n");
break;
}
case 4: { printf("冒泡排序结果:");
bubble(L);
printf("\n");
break; }
case 5: { printf("快速排序结果:");
qsort(L,1,L.length);
for(n=1; n < L.length+1; n++)
printf("%d,",L.r[n].key);
printf("\n");
break; }
case 6: { printf("简单选择排序结果:");
selectsort(L);
for(n=1; n < L.length+1; n++)
printf("%d,",L.r[n].key);
printf("\n");
break; }
case 7: { printf("堆排序结果:");
heapsort(L);
for(n=1; n < L.length+1; n++)
printf("%d,",L.r[n].key);
printf("\n");
break; }
case 8: { printf("归并排序结果:");
mergesort(L);
for(n=1; n < L.length+1; n++)
printf("%d,",L.r[n].key);
printf("\n");
break; }
case 9: { radixsort(L);
printf("基数排序结果:");
for(n=1; n < L.length+1; n++)
printf("%d,",L.r[n].key);
printf("\n");
break; }
case 0: b = 0; break;
}
}
}

这是基本的几种算法,其他的应该不难。

热心网友 时间:2023-10-22 16:14

一次要求太多
还乱。

热心网友 时间:2023-10-22 16:13

#include"stdio.h"
#include"malloc.h"
#include"math.h"
#define MAXSIZE 20

typedef struct{
int key; //关键字项
}redtype;

typedef struct{
redtype r[MAXSIZE+1];
int length; //顺序表长度
}sqlist; //顺序表类型

/* 直接插入 */
void insertsort(sqlist &L){
int i,j;
for(i=2;i<=L.length;++i)
if(L.r[i].key < L.r[i-1].key){
L.r[0] = L.r[i];
L.r[i] = L.r[i-1];
for(j=i-2;L.r[0].key < L.r[j].key;--j)
L.r[j + 1] = L.r[j] ;
L.r[j+1] = L.r[0];
}
for(i=1; i < L.length+1; i++)
printf("%d,",L.r[i].key);
}

/* 折半插入 */
void binsertsort(sqlist &L){
int low,m,high,i,j;
for(i=2;i<=L.length;++i){
L.r[0] = L.r[i];
low=1; high=i-1;
while(low <= high){
m = (low+high)/2;
if(L.r[0].key < L.r[m].key)
high = m-1;
else low = m+1;
}
for(j=i-1;j>=high+1;--j)
L.r[j+1] = L.r[j];
L.r[high+1] = L.r[0];
}
for(i=1; i < L.length+1; i++)
printf("%d,",L.r[i].key);
}

/* 希尔排序 */
void shellinsert(sqlist &L,int d){
int i,j;
for(i=d+1;i<=L.length;++i)
if(L.r[i].key < L.r[i-d].key){
L.r[0] = L.r[i];
for(j=i-d;j>0 && L.r[0].key<L.r[j].key;j=j-d)
L.r[j+d] = L.r[j];
L.r[j+d] = L.r[0];
}
}
void shellsort(sqlist &L,int dl[],int t){
int k,i;
for(k=0;k<t;++k)
shellinsert(L,dl[k]);
for(i=1; i < L.length+1; i++)
printf("%d,",L.r[i].key);
}

/* 冒泡排序 */
void bubble(sqlist &L){
int i,j;
for(j=0;j<L.length;++j)
for(i=1;i<L.length-j;++i)
if(L.r[i].key > L.r[i+1].key){
L.r[0] = L.r[i];
L.r[i] = L.r[i+1];
L.r[i+1] = L.r[0];
}
for(i=1; i < L.length+1; i++)
printf("%d,",L.r[i].key);
}

/* 快速排序 */
int partition(sqlist &L,int low,int high){
int pivotkey;
L.r[0] = L.r[low];
pivotkey = L.r[low].key;
while(low<high){
while(low<high && L.r[high].key>=pivotkey) --high;
L.r[low].key = L.r[high].key;
while(low<high && L.r[low].key<=pivotkey) ++low;
L.r[high].key = L.r[low].key;
}
L.r[low] = L.r[0];
return low;
}
void qsort(sqlist &L,int low,int high){
int pivotloc,i;
if(low < high){
pivotloc = partition(L,low,high);
qsort(L,low,pivotloc-1);
qsort(L,pivotloc+1,high);
}
}

/* 简单选择排序 */
void selectsort(sqlist &L){
int i,j,k,temp;
for(i=1; i<L.length; ++i){
k = i;
for(j = i+1;j <= L.length; ++j)
{
if(L.r[k].key > L.r[j].key)
k = j;
}
if(k != i){
temp = L.r[i].key;
L.r[i].key = L.r[k].key;
L.r[k].key = temp;
}
}
}

/* 堆排序 */
void heapajust(sqlist &L,int s,int m){
int j,temp;
temp = L.r[s].key;
for(j=2*s; j<=m; j*=2){
if(j<m && L.r[j].key<L.r[j+1].key) ++j;
if(temp > L.r[j].key) break;
L.r[s].key = L.r[j].key; s = j;
}
L.r[s].key = temp;
}
void heapsort(sqlist &L){
int i,temp;
for(i=L.length/2; i>0; --i)
heapajust(L,i,L.length);
for(i=L.length; i>1; --i)
{ temp = L.r[1].key;
L.r[1].key = L.r[i].key;
L.r[i].key = temp;
heapajust(L,1,i-1);
}
}

/* 归并排序 */
void merge(sqlist S,sqlist &T,int i,int m,int n){
int j,k;
for(j=m+1, k=i; i<=m && j<=n; ++k){
if(S.r[i].key < S.r[j].key)
T.r[k].key = S.r[i++].key;
else T.r[k].key = S.r[j++].key;
}
while(i <= m) T.r[k++].key = S.r[i++].key;
while(j <= n) T.r[k++].key = S.r[j++].key;
}
void msort(sqlist S,sqlist &T1,int l,int h){
int m;
sqlist T2;
if(l == h) T1.r[l].key = S.r[l].key;
else{
m = (l+h)/2;
msort(S,T2,l,m);
msort(S,T2,m+1,h);
merge(T2,T1,l,m,h);
}
}
void mergesort(sqlist &L){
msort(L,L,1,L.length);
}

/* 基数排序 */
void radixsort(sqlist &L){
int i,j,k,p,q,m;
int f[10][10];
printf("输入的数中最多为几位?");
scanf("%d",&m);
for(j=m; j>0; --j){
for(p=0; p<10; p++)
for(q=0; q<L.length; q++)
f[p][q] = 0; //将数组每位都置0
for(i=1; i<=L.length; ++i){
k = L.r[i].key/(int(pow(10,m-j)))%10;
p = 0; q = 0;
while(p != k) p++;
while(f[p][q] != 0) q++;
f[p][q] = L.r[i].key;
}
i = 1;
for(p=0; p<10; p++)
for(q=0; f[p][q] != 0; q++)
{ L.r[i].key = f[p][q]; i++; }
}
}

void main()
{ sqlist L;
int a,b,n,t;
int dl[10];
printf("Please input the length :") ;
scanf("%d",&L.length);
for(n=1; n < L.length+1; n++)
scanf("%d",&L.r[n].key);
b = 1;
while(b == 1){
printf("\n1.直接插入排序.\n2.折半插入排序.\n3.希尔排序\n4.冒泡排序\n5.快速排序\n6.简单选择排序.\n7.堆排序.\n8.归并排序\n9.基数排序.\n0.退出.\n请选择:");
scanf("%d",&a);
switch(a){
case 1: { printf("直接插入排序结果:");
insertsort(L);
printf("\n");
break; }
case 2: { printf("折半插入排序结果:");
binsertsort(L);
printf("\n");
break; }
case 3: {
printf("请输入希尔排序的基数个数:t = ");
scanf("%d",&t);
printf("\n输入希尔排序的基数:");
for(n=0;n<t;n++)
scanf("%d",&dl[n]);
printf("\n希尔排序结果:");
shellsort(L,dl,t);
printf("\n");
break;
}
case 4: { printf("冒泡排序结果:");
bubble(L);
printf("\n");
break; }
case 5: { printf("快速排序结果:");
qsort(L,1,L.length);
for(n=1; n < L.length+1; n++)
printf("%d,",L.r[n].key);
printf("\n");
break; }
case 6: { printf("简单选择排序结果:");
selectsort(L);
for(n=1; n < L.length+1; n++)
printf("%d,",L.r[n].key);
printf("\n");
break; }
case 7: { printf("堆排序结果:");
heapsort(L);
for(n=1; n < L.length+1; n++)
printf("%d,",L.r[n].key);
printf("\n");
break; }
case 8: { printf("归并排序结果:");
mergesort(L);
for(n=1; n < L.length+1; n++)
printf("%d,",L.r[n].key);
printf("\n");
break; }
case 9: { radixsort(L);
printf("基数排序结果:");
for(n=1; n < L.length+1; n++)
printf("%d,",L.r[n].key);
printf("\n");
break; }
case 0: b = 0; break;
}
}
}

这是基本的几种算法,其他的应该不难。

热心网友 时间:2023-10-22 16:14

一次要求太多
还乱。

热心网友 时间:2023-10-22 16:14

在刚学c语言的时候,int
float
double
char
这几个是比较常用的类型,另外可能自己定义结构体来扩充类型

热心网友 时间:2023-10-22 16:14

在刚学c语言的时候,int
float
double
char
这几个是比较常用的类型,另外可能自己定义结构体来扩充类型

热心网友 时间:2023-10-22 16:13

#include"stdio.h"
#include"malloc.h"
#include"math.h"
#define MAXSIZE 20

typedef struct{
int key; //关键字项
}redtype;

typedef struct{
redtype r[MAXSIZE+1];
int length; //顺序表长度
}sqlist; //顺序表类型

/* 直接插入 */
void insertsort(sqlist &L){
int i,j;
for(i=2;i<=L.length;++i)
if(L.r[i].key < L.r[i-1].key){
L.r[0] = L.r[i];
L.r[i] = L.r[i-1];
for(j=i-2;L.r[0].key < L.r[j].key;--j)
L.r[j + 1] = L.r[j] ;
L.r[j+1] = L.r[0];
}
for(i=1; i < L.length+1; i++)
printf("%d,",L.r[i].key);
}

/* 折半插入 */
void binsertsort(sqlist &L){
int low,m,high,i,j;
for(i=2;i<=L.length;++i){
L.r[0] = L.r[i];
low=1; high=i-1;
while(low <= high){
m = (low+high)/2;
if(L.r[0].key < L.r[m].key)
high = m-1;
else low = m+1;
}
for(j=i-1;j>=high+1;--j)
L.r[j+1] = L.r[j];
L.r[high+1] = L.r[0];
}
for(i=1; i < L.length+1; i++)
printf("%d,",L.r[i].key);
}

/* 希尔排序 */
void shellinsert(sqlist &L,int d){
int i,j;
for(i=d+1;i<=L.length;++i)
if(L.r[i].key < L.r[i-d].key){
L.r[0] = L.r[i];
for(j=i-d;j>0 && L.r[0].key<L.r[j].key;j=j-d)
L.r[j+d] = L.r[j];
L.r[j+d] = L.r[0];
}
}
void shellsort(sqlist &L,int dl[],int t){
int k,i;
for(k=0;k<t;++k)
shellinsert(L,dl[k]);
for(i=1; i < L.length+1; i++)
printf("%d,",L.r[i].key);
}

/* 冒泡排序 */
void bubble(sqlist &L){
int i,j;
for(j=0;j<L.length;++j)
for(i=1;i<L.length-j;++i)
if(L.r[i].key > L.r[i+1].key){
L.r[0] = L.r[i];
L.r[i] = L.r[i+1];
L.r[i+1] = L.r[0];
}
for(i=1; i < L.length+1; i++)
printf("%d,",L.r[i].key);
}

/* 快速排序 */
int partition(sqlist &L,int low,int high){
int pivotkey;
L.r[0] = L.r[low];
pivotkey = L.r[low].key;
while(low<high){
while(low<high && L.r[high].key>=pivotkey) --high;
L.r[low].key = L.r[high].key;
while(low<high && L.r[low].key<=pivotkey) ++low;
L.r[high].key = L.r[low].key;
}
L.r[low] = L.r[0];
return low;
}
void qsort(sqlist &L,int low,int high){
int pivotloc,i;
if(low < high){
pivotloc = partition(L,low,high);
qsort(L,low,pivotloc-1);
qsort(L,pivotloc+1,high);
}
}

/* 简单选择排序 */
void selectsort(sqlist &L){
int i,j,k,temp;
for(i=1; i<L.length; ++i){
k = i;
for(j = i+1;j <= L.length; ++j)
{
if(L.r[k].key > L.r[j].key)
k = j;
}
if(k != i){
temp = L.r[i].key;
L.r[i].key = L.r[k].key;
L.r[k].key = temp;
}
}
}

/* 堆排序 */
void heapajust(sqlist &L,int s,int m){
int j,temp;
temp = L.r[s].key;
for(j=2*s; j<=m; j*=2){
if(j<m && L.r[j].key<L.r[j+1].key) ++j;
if(temp > L.r[j].key) break;
L.r[s].key = L.r[j].key; s = j;
}
L.r[s].key = temp;
}
void heapsort(sqlist &L){
int i,temp;
for(i=L.length/2; i>0; --i)
heapajust(L,i,L.length);
for(i=L.length; i>1; --i)
{ temp = L.r[1].key;
L.r[1].key = L.r[i].key;
L.r[i].key = temp;
heapajust(L,1,i-1);
}
}

/* 归并排序 */
void merge(sqlist S,sqlist &T,int i,int m,int n){
int j,k;
for(j=m+1, k=i; i<=m && j<=n; ++k){
if(S.r[i].key < S.r[j].key)
T.r[k].key = S.r[i++].key;
else T.r[k].key = S.r[j++].key;
}
while(i <= m) T.r[k++].key = S.r[i++].key;
while(j <= n) T.r[k++].key = S.r[j++].key;
}
void msort(sqlist S,sqlist &T1,int l,int h){
int m;
sqlist T2;
if(l == h) T1.r[l].key = S.r[l].key;
else{
m = (l+h)/2;
msort(S,T2,l,m);
msort(S,T2,m+1,h);
merge(T2,T1,l,m,h);
}
}
void mergesort(sqlist &L){
msort(L,L,1,L.length);
}

/* 基数排序 */
void radixsort(sqlist &L){
int i,j,k,p,q,m;
int f[10][10];
printf("输入的数中最多为几位?");
scanf("%d",&m);
for(j=m; j>0; --j){
for(p=0; p<10; p++)
for(q=0; q<L.length; q++)
f[p][q] = 0; //将数组每位都置0
for(i=1; i<=L.length; ++i){
k = L.r[i].key/(int(pow(10,m-j)))%10;
p = 0; q = 0;
while(p != k) p++;
while(f[p][q] != 0) q++;
f[p][q] = L.r[i].key;
}
i = 1;
for(p=0; p<10; p++)
for(q=0; f[p][q] != 0; q++)
{ L.r[i].key = f[p][q]; i++; }
}
}

void main()
{ sqlist L;
int a,b,n,t;
int dl[10];
printf("Please input the length :") ;
scanf("%d",&L.length);
for(n=1; n < L.length+1; n++)
scanf("%d",&L.r[n].key);
b = 1;
while(b == 1){
printf("\n1.直接插入排序.\n2.折半插入排序.\n3.希尔排序\n4.冒泡排序\n5.快速排序\n6.简单选择排序.\n7.堆排序.\n8.归并排序\n9.基数排序.\n0.退出.\n请选择:");
scanf("%d",&a);
switch(a){
case 1: { printf("直接插入排序结果:");
insertsort(L);
printf("\n");
break; }
case 2: { printf("折半插入排序结果:");
binsertsort(L);
printf("\n");
break; }
case 3: {
printf("请输入希尔排序的基数个数:t = ");
scanf("%d",&t);
printf("\n输入希尔排序的基数:");
for(n=0;n<t;n++)
scanf("%d",&dl[n]);
printf("\n希尔排序结果:");
shellsort(L,dl,t);
printf("\n");
break;
}
case 4: { printf("冒泡排序结果:");
bubble(L);
printf("\n");
break; }
case 5: { printf("快速排序结果:");
qsort(L,1,L.length);
for(n=1; n < L.length+1; n++)
printf("%d,",L.r[n].key);
printf("\n");
break; }
case 6: { printf("简单选择排序结果:");
selectsort(L);
for(n=1; n < L.length+1; n++)
printf("%d,",L.r[n].key);
printf("\n");
break; }
case 7: { printf("堆排序结果:");
heapsort(L);
for(n=1; n < L.length+1; n++)
printf("%d,",L.r[n].key);
printf("\n");
break; }
case 8: { printf("归并排序结果:");
mergesort(L);
for(n=1; n < L.length+1; n++)
printf("%d,",L.r[n].key);
printf("\n");
break; }
case 9: { radixsort(L);
printf("基数排序结果:");
for(n=1; n < L.length+1; n++)
printf("%d,",L.r[n].key);
printf("\n");
break; }
case 0: b = 0; break;
}
}
}

这是基本的几种算法,其他的应该不难。

热心网友 时间:2023-10-22 16:14

一次要求太多
还乱。

热心网友 时间:2023-10-22 16:14

在刚学c语言的时候,int
float
double
char
这几个是比较常用的类型,另外可能自己定义结构体来扩充类型
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
焦作有哪些旅行景点值得一去? 河南穿古装去的地方 AE入门从学会套模板开始,AE模板套用简易教程,看起来复杂的AE其实也很... ae怎么套用模板ae模版的使用方法 北京通州区有什么好玩的地方吗 请问现在有哪些看电影的网站?越多越好~~ 帮初中女儿请假一天讲身体不适,班主任却跟别的老师讲她得了大病,该如何... 梦见家中被盗空只剩一件绿色衣的预兆 梦见美丽沙穗 美版4s内置卡贴有什么危害? 12306不是学生买成了学生票? 2022大盘休市时间 12306错买学生票怎么办?能换成成人票吗? 不小心网上买成了学生票,可以改成普通票吗?如果可以,要怎么改? 把好友删除 没有 只有转账记录 怎么加回来 qq绑定的手机号换了该怎么办? wps 角标设置,如何去掉页面下方,如图 如图,WPS里文章结尾有一条横线,怎么都去不掉,删除不了也选不上。问一下怎么去掉? 苹果7刷机后恢复数据失败怎么办 怎么将苹果手机字体转换成隶书字体 iPhone8刷机失败提示无法恢复怎么办 360手机助手,腾讯手机管家,赠送保险,保单号在哪里查询? 下面圆圈上面一个向上箭头的符号(不是斜的)怎么打? sk2祛斑和美白的哪个 sk2面膜青春敷男友补水面膜和补水美白哪个好 怎么改QQ空间里的名字? 《 箭头朝上的符号怎么打? sk2美白面膜好用还是3D 那些幸福的时光作文 最好用的几款美白面膜 12306买了学生票之后没有进行资质认证需要取消吗 C语言的结构类型 c语言的结构体类型 C语言中构造类型数据指什么? qq 发红包怎么取消实名验证 qq不能发红包需实名验证该怎么把实名验证去掉 女人每天游泳半小时,30天后,身体会发生哪些变化呢? 每天游泳2000米坚持3个月身体有何变化 大家都重视体育健身,那么坚持游泳两个月是什么体验? 坚持游泳5个月,身体有哪些变化?经常游泳应该注意什么? 长期游泳身体会有什么变化? 对于经常游泳的人来说,身材会出现哪些变化? 说说你游泳一段时间后的身体变化! 持续游泳1个月,会有什么惊人变化? 男性坚持游泳一个月,有哪些意想不到的变化,值得一看? 农商银行以前微信收款有奖金收入现在为什么没有? 游泳可以减肥吗?经常游泳身体会有什么变化? 炸茄盒的做法有哪些? 游泳一个月身材的变化 游泳能减肥吗 每天游泳半小时 2个月健康瘦18斤