目录
7-1 数据结构实验五 快速排序
#include "stdio.h"
#define MAXSIZE 50 // MAXSIZE为最大数据元素数目
typedef int ElemType;
typedef struct
{
ElemType data[MAXSIZE +1]; // r[0]闲置或另作它用
int length;
}SqList;
void sort(SqList *sqList,int left,int right)
{
// printf("%d %d\n",left,right);
if(left>=right) return;
int flag = sqList->data[left];
int l=left,r=right;
while (l<r){
while (l<r && sqList->data[r]>=flag) r--;
while (l<r && sqList->data[l]<=flag) l++;
if(l>=r) break;
ElemType key = sqList->data[r];
sqList->data[r] = sqList->data[l];
sqList->data[l] = key;
}
sqList->data[left] = sqList->data[r];
sqList->data[r] = flag;
sort(sqList,left,l-1);
sort(sqList,l+1,right);
}
int main(){
SqList sqList;
scanf("%d",&sqList.length);
for(int z=1;z<=sqList.length;z++) scanf("%d",&sqList.data[z]);
sort(&sqList,1,sqList.length);
if(sqList.length){
printf("%d",sqList.data[1]);
for(int z=2;z<=sqList.length;z++) printf(" %d",sqList.data[z]);
}
return 0;
}
7-2 数据结构实验五 直接插入排序
#include "stdio.h"
#define MAXSIZE 50 // MAXSIZE为最大数据元素数目
typedef int ElemType;
typedef struct
{
ElemType data[MAXSIZE +1]; // r[0]闲置或另作它用
int length;
}SqList;
int main(){
SqList sqList;
scanf("%d",&sqList.length);
for(int z=1;z<=sqList.length;z++) scanf("%d",&sqList.data[z]);
for(int z=2;z<=sqList.length;z++){
int flag = z;
while (flag>1 && sqList.data[flag]<sqList.data[flag-1]) {
ElemType temp = sqList.data[flag];
sqList.data[flag] = sqList.data[flag-1];
sqList.data[--flag] = temp;
}
}
if(sqList.length){
printf("%d",sqList.data[1]);
for(int z=2;z<=sqList.length;z++) printf(" %d",sqList.data[z]);
}
return 0;
}
7-3 快速排序
#include "stdio.h"
#define MAXSIZE 100 // MAXSIZE为最大数据元素数目
typedef int ElemType;
typedef struct
{
ElemType data[MAXSIZE +1]; // r[0]闲置或另作它用
int length;
}SqList;
void sort(ElemType *data,int left,int right,int length)
{
// printf("%d %d\n",left,right);
if(left>=right) return;
int l=left,r=right,op=0;
while (l<r){
if(data[l]>data[r]){
int temp = data[l];
data[l] = data[r];
data[r] = temp;
op = op==0? 1 : 0;
continue;
}
op ? l++ : r--;
}
printf("%d", data[1]);
for (int z = 2; z <= length; z++) printf(" %d", data[z]);
puts("");
sort(data,left,l-1,length);
sort(data,l+1,right,length);
}
int main()
{
SqList sqList;
int complete;
while ( scanf("%d",&sqList.length)!=EOF){
for(int z=1;z<=sqList.length;z++) scanf("%d",&sqList.data[z]);
sort(sqList.data,1,sqList.length,sqList.length);
}
return 0;
}
7-4 排序与查找
#include<stdio.h>
int findIndex(int *nums,int N,int K){
int l=1,r=N;
while (l<=r){
int mid = (r+l)/2;
if(nums[mid]==K) return mid;
if(nums[mid]<K) l = mid+1;
else r = mid-1;
}
return 0;
}
int main()
{
int nums[101],N,M,K;
while (scanf("%d",&N)!=EOF){
for(int z=1;z<=N;z++) scanf("%d",&nums[z]);
for(int z=1;z<N;z++){
for(int z1=1;z1<=N-z;z1++){
if(nums[z1]>nums[z1+1]){
nums[z1+1]^=nums[z1]^=nums[z1+1]^=nums[z1];
}
}
}
printf("%d",nums[1]);
for(int z=2;z<=N;z++) printf(" %d",nums[z]);
putchar('\n');
scanf("%d",&M);
while (M--){
scanf("%d",&K);
printf("%d", findIndex(nums,N,K));
putchar((M==0?'\n':' '));
}
}
return 0;
}
7-5 字符串排序--string类的使用
#include<stdio.h>
#include<string.h>
char str[2022][1205];
int main()
{
int N;
while (scanf("%d\n",&N)!=EOF){
for(int z=1;z<=N;z++){
gets(str[z]);
if(strcmp(str[z],"stop")==0){
N = z-1;
break;
}
}
for(int z=1;z<=N;z++){
int key = 1;
for(int z1=1;z1<=N;z1++){
if(strlen(str[z1])<strlen(str[key])) {
key = z1;
}
}
puts(str[key]);
strcpy(str[key],"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111");
}
}
return 0;
}
7-6 成绩排序
#include<stdio.h>
#include<string.h>
struct Student{
char name[2022];
int score,apr;
}s[101];
int cmp(int x,int y){
if(s[x].score!=s[y].score) return s[x].score < s[y].score;
return strcmp(s[x].name,s[y].name) > 0;
}
int main(){
int N;
scanf("%d",&N);
for(int z=0;z<N;z++) {
scanf("%s %d",&s[z].name,&s[z].score);
s[z].apr = 0;
}
for(int z=0;z<N;z++){
int flag = 0;
while (s[flag].apr) flag++;
for(int z1=flag+1;z1<N;z1++){
if(!s[z1].apr && cmp(flag,z1)){
flag = z1;
}
}
s[flag].apr = 1;
printf("%s %d\n",s[flag].name,s[flag].score);
}
return 0;
}
7-7 冒泡排序练习
#include<stdio.h>
int main()
{
int nums[101],N,K;
while(scanf("%d %d",&N,&K)!=EOF){
for(int z=0;z<N;z++) scanf("%d",&nums[z]);
for(int z=1;z<=K;z++){
for(int z1=0;z1<N-z;z1++){
if(nums[z1]>nums[z1+1]){
nums[z1] ^= nums[z1+1] ^= nums[z1] ^= nums[z1+1];
}
}
}
printf("%d",nums[0]);
for(int z=1;z<N;z++) printf(" %d",nums[z]);
putchar('\n');
}
return 0;
}
7-8 sdut-C语言实验- 冒泡排序中数据交换的次数
#include<stdio.h>
int main()
{
int nums[101],N;
scanf("%d",&N);
while(N--){
int result = 0,M;
scanf("%d",&M);
for(int z=0;z<M;z++) scanf("%d",&nums[z]);
for(int z=1;z<=M;z++){
for(int z1=0;z1<M-z;z1++){
if(nums[z1]>nums[z1+1]){
nums[z1] ^= nums[z1+1] ^= nums[z1] ^= nums[z1+1];
result++;
}
}
}
printf("%d\n",result);
}
return 0;
}
7-9 选择排序
#include<stdio.h>
int main()
{
int nums[1000001],N;
scanf("%d",&N);
for(int z=0;z<N;z++) scanf("%d",&nums[z]);
for(int z=0;z<N-1;z++){
int index = z;
for(int z1=z;z1<N;z1++){
if(nums[z1]<nums[index]){
index = z1;
}
}
if(z!=index) nums[z]^=nums[index]^=nums[z]^=nums[index];
printf("step %d: ",z+1);
for(int z1=0;z1<N;z1++) printf("%d ",nums[z1]);
putchar('\n');
}
printf("sorted array: ");
for(int z=0;z<N;z++) printf("%d ",nums[z]);
return 0;
}
7-10 插入排序
#include<stdio.h>
void print(int *nums,int N){
printf("%d",nums[0]);
for(int z=1;z<N;z++) printf(" %d",nums[z]);
putchar('\n');
}
int main()
{
int nums[10001],N;
scanf("%d",&N);
for(int z=0;z<N;z++) scanf("%d",&nums[z]);
// print(nums,N);
for(int z=1;z<N;z++){
int key = z;
while (key>0 && nums[key]<nums[key-1]){
int temp = nums[key];
nums[key] = nums[key-1];
nums[--key] = temp;
}
print(nums,N);
}
return 0;
}