This commit is contained in:
2026-06-15 09:00:38 +08:00
parent fec66377d5
commit 4640c5e02b
191 changed files with 6046 additions and 0 deletions
+40
View File
@@ -0,0 +1,40 @@
#include<stdio.h>
void Search(int a[],int n,int x,int*i,int*j){
int start=0,end=n-1;
*i=-1;
*j=-1;
while(start<end){
int mid=start+(end-start)/2;
if(a[mid]==x){
*i=mid;
*j=mid;
}
else if(a[mid]<x){
start=mid+1;
*i=mid;
}
else {
end=mid-1;
*j=mid;
}
}
}
int main(){
int a[]={2,4,6,8,9,10,12,13};
int x=8;
int n=sizeof(a)/sizeof(a[0]);
int i,j;
Search(a,n,x,&i,&j);
if(i==-1&&j==-1){
printf("未找到%d的信息\n",x);
}
else if(i==j){
printf("目标元素%d位于%d\n",x,i);
}
else{
printf("未找到目标元素%d的值\n",x);
printf("小于%d的最大元素位置%d\n",x,i);
printf("大于%d的最小元素位置%d\n",x,j);
}
}
Binary file not shown.
+49
View File
@@ -0,0 +1,49 @@
#include<stdio.h>
void Search(int a[], int n, int x, int *i, int *j) {
int start = 0, end = n - 1;
*i = -1;
*j = -1;
while (start <= end) {
int mid = start + (end - start) / 2;
if (a[mid] == x) {
*i = mid; // 找到目标元素
*j = mid; // 初始化 *j
// 向左查找相同元素
while (*i > 0 && a[*i - 1] == x) {
(*i)--;
}
// 向右查找相同元素
while (*j < n - 1 && a[*j + 1] == x) {
(*j)++;
}
return;
} else if (a[mid] < x) {
start = mid + 1;
*i = mid; // 可能是小于 x 的最大元素
} else {
end = mid - 1;
*j = mid; // 可能是大于 x 的最小元素
}
}
}
int main() {
int a[] = {2, 4, 6, 8, 9, 10, 12, 13};
int x = 7;
int n = sizeof(a) / sizeof(a[0]);
int i, j;
Search(a, n, x, &i, &j);
if (i == -1 && j == -1) {
printf("未找到%d的信息\n", x);
} else if (i == j) {
printf("目标元素%d位于%d\n", x, i);
} else {
printf("未找到目标元素%d的值\n", x);
printf("小于%d的最大元素位置%d\n", x, i);
printf("大于%d的最小元素位置%d\n", x, j);
}
}
Binary file not shown.
+61
View File
@@ -0,0 +1,61 @@
#include <stdio.h>
#include <stdlib.h>
int bijiao(const void* a, const void* b) {
return (*(int*)a - *(int*)b);
}
int used[100];
void dayi(int *arr, int n) {
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]); // 添加空格以便于阅读
}
printf("\n");
}
void pailie(int *arr, int start, int end) {
if (start == end) {
dayi(arr, end + 1);
} else {
for (int i = start; i <= end; i++) {
// 检查当前元素是否已经使用
if (!used[i]) {
// 检查前一个元素是否相同且未被使用
if (i > start && arr[i] == arr[i - 1] && !used[i - 1]) {
continue; // 跳过重复元素
}
used[i] = 1;
// 交换元素
int t = arr[start];
arr[start] = arr[i];
arr[i] = t;
pailie(arr, start + 1, end);
// 交换回去
t = arr[start];
arr[start] = arr[i];
arr[i] = t;
used[i] = 0;
}
}
}
}
int main() {
int arr[] = {1, 2, 3, 4, 3, 6};
int size = sizeof(arr) / sizeof(arr[0]);
// 排序以方便后续去重
qsort(arr, size, sizeof(int), bijiao);
// 初始化使用标记数组
for (int i = 0; i < size; i++) {
used[i] = 0;
}
pailie(arr, 0, size - 1);
return 0;
}
Binary file not shown.
+42
View File
@@ -0,0 +1,42 @@
#include"stdio.h"
#include"stdlib.h"
int bijiao(const void* a, const void*b){
return (*(int*)a-*(int*)b);
}
int used[100];
void dayi(int *arr,int n){
for(int i=0;i<n;i++){
printf("%d",arr[i]);
}
printf("\n");
}
void pailie(int *arr,int start,int end){
if(start==end){
dayi(arr,end+1);
}
else{
for(int i=start;i<=end;i++){
if(!used[i]){
used[i]=1;
int t=arr[start];
arr[start]=arr[i];
arr[i]=t;
pailie(arr,start+1,end);
t=arr[start];
arr[start]=arr[i];
arr[i]=t;
used[i]=0;
}
}
}
}
int main(){
int arr[]={1,2,3,4,3,6};
int size=sizeof(arr)/sizeof(arr[0]);
qsort(arr,size,sizeof(int),bijiao);
for(int i=0;i<size;i++){
used[i]=0;
}
pailie(arr,0,size-1);
}
Binary file not shown.
+42
View File
@@ -0,0 +1,42 @@
#include"stdio.h"
#include"stdlib.h"
int bijiao(const void* a, const void*b){
return (*(int*)a-*(int*)b);
}
int used[100];
void dayi(int *arr,int n){
for(int i=0;i<n;i++){
printf("%d",arr[i]);
}
printf("\n");
}
void pailie(int *arr,int start,int end){
if(start==end){
dayi(arr,end+1);
}
else{
for(int i=start;i<=end;i++){
if(!used[i]){
used[i]=1;
int t=arr[start];
arr[start]=arr[i];
arr[i]=t;
pailie(arr,start+1,end);
t=arr[start];
arr[start]=arr[i];
arr[i]=t;
used[i]=0;
}
}
}
}
int main(){
int arr[]={1,2,3,4,3,6};
int size=sizeof(arr)/sizeof(arr[0]);
qsort(arr,size,sizeof(int),bijiao);
for(int i=0;i<size;i++){
used[i]=0;
}
pailie(arr,0,size-1);
}
Binary file not shown.
+22
View File
@@ -0,0 +1,22 @@
#include "stdio.h"
int findMax(int arr[], int a, int size) {
if (size == 1) {
return arr[a]; // 返回当前元素值
}
int maxOfRest = findMax(arr, a + 1, size - 1); // 递归调用
if (arr[a] > maxOfRest) {
return arr[a]; // 返回当前元素值
} else {
return maxOfRest; // 返回剩余部分的最大值
}
}
int main() {
int arr[] = {8, 1, 5, 9};
int size = sizeof(arr) / sizeof(arr[0]);
int Max = findMax(arr, 0, size); // 获取最大值
printf("最大元素是:%d\n", Max);
return 0;
}
Binary file not shown.