- 前言
- 一、第一题:实验步骤及结果
- 二、第二题:实验步骤及结果
前言
解决以下两个问题:
1、实现10个数据的快速排序(升序);
2、有一个数组A[10],里面存放了10个整数,顺序递增。任意输入一个数字n,找到n在数组中的位置。如果n不属于该数组A,显示错误提示。A[10]={2,3,5,7,9,11,12,15,19,22}.
一、第一题:实验步骤及结果
#includevoid display(int array[], int maxlen) { int i; for(i = 0;i printf("%5d",array[i]); } printf("n"); return ; } void display2(int array[], int maxlen) { int i; for(i=9;i>-1;i--) { printf("%5d",array[i]); } printf("n"); return ; } void QuickSort(int *arr, int low, int high) { if (low < high) { int i = low; int j = high; int k = arr[low]; while (i < j) { while(i < j && arr[j] >= k) { j--; } if(i < j) { arr[i++] = arr[j]; } while(i < j && arr[i] < k) { i++; } if(i < j) { arr[j--] = arr[i]; } } arr[i] = k; QuickSort(arr, low, i - 1); QuickSort(arr, i + 1, high); } } int main() { int i,c; int array[10]; printf("请输入十个数将进行升序n"); for(i=0;i<10;i++){ printf("你输入的第%d个数是 ",i+1); scanf("%d",&array[i]);} printf("排序前的数组n"); display(array,10); QuickSort(array, 0, 9); printf("想要升序排列请按1n想要降序排列请按2n"); scanf("%d",&c); if(c==1) {printf("排序后的数组(升序)n"); display(array, 10);} else if(c==2) {printf("排序后的数组(降序)n"); display2(array, 10);} else {printf("请正确输入,亲");} return 0; }
实现效果:
思路解释:
1.构造一个display函数用于最后的输出,以及刚开始的输出
2.建立数组用来存放要排序的值
3.建立quicksort函数,传入三个值末尾值、开始值,以及数组
通过比较不断更改数组值得位置的下标,利用递归不断交换
4.升序降序输出就是更改数组输出的方式。
#include#include void QuickSort(int *arr, int low, int high) { if (low < high) { int i = low; int j = high; int k = arr[low]; while (i < j) { while(i < j && arr[j] >= k) { j--; } if(i < j) { arr[i++] = arr[j]; } while(i < j && arr[i] < k) { i++; } if(i < j) { arr[j--] = arr[i]; } } arr[i] = k; QuickSort(arr, low, i - 1); QuickSort(arr, i + 1, high); } } int main(){ int a[10]; int i,num,n,low,high,mid,m; printf("请输入十个数的数组:n"); for(i=0;i<10;i++){ printf("请输入第%d个数 ",i+1); scanf("%d",&a[i]); } printf("你输入的数组是n"); for(m=0;m<10;m++){ printf("%5d",a[m]); } QuickSort(a, 0, 9); printf("n从小到大排序后的数组是n"); for(m=0;m<10;m++){ printf("%5d",a[m]); } printf("n请输入数组中的一个数将查验此数位置:"); scanf("%d",&num); n=10; low=0; high=n-1; while(low<=high){ mid=(low+high)/2; if(numa[mid]) low=mid+1; else if(num==a[mid]){ printf("亲您选择的**%d**是数组中**第%d个**元素的值",num,mid+1); break; } } if(num!=a[mid]) printf("无此数"); getch(); return 0; }
运行结果:
思路解释:
第二题算是对第一题的触类旁通吧,只是多了一个下标的思路来查找元素的值。



