快速排序&折半查找

    技术2022-05-18  12

    ///=======折半查找.二分法======= ///如有BUG或意见,联系邮箱:dabbysunshine@qq.com #include <stdio.h> #include <stdlib.h> #include <string.h> void CreateData(int *Data,int m); //随机构造一组数据 void SelectSort(int *Data,int m); //选择法排序 void Swap(int *m,int *n); //交换两个数 int DichotomySearch(int*Data,int m,int n);//二分法非递归查找 void Output(int *Data,int m); //输出构造的数据 int main(void) { int m,n; while(scanf("%d",&m) != EOF && m > 0) { int Data[m]; CreateData(Data,m); Output(Data,m); SelectSort(Data,m); printf("输入你要查找的元素的值:"); scanf("%d",&n); m = DichotomySearch(Data,m,n); if(m) { printf("构造的数据中存在%d./n",n); printf("将数据以非递减的要求排序后的位置是:%d./n",m); } else { printf("构造的数据中不存在%d./n",n); } } printf("Never Give Up!~~/n"); return 0; } void CreateData(int *Data,int m) { //随机构造一组数据 int i; for(i = 0; i < m; i++) { Data[i] = rand()/100; } } void SelectSort(int *Data,int m) { //选择法排序 int *p, i,j; for( i = 0; i < m; i++) { p = &Data[i]; for(j = i + 1; j < m; j++) { if(Data[j] < *p) { p = &Data[j]; } } if(p != &Data[i]) { Swap(p,&Data[i]); } } } void Swap(int *m,int *n) { //交换两个数 int iTemp = *m; *m = *n; *n = iTemp; } int DichotomySearch(int *Data,int m,int n) { //二分法非递归查找 int left = 0,right = m - 1; int Middle; while(left <= right) { Middle = (left + right)/2; if(n > Data[Middle]) { left = Middle + 1; } else if(n < Data[Middle]) { right = Middle - 1; } else { return Middle + 1; } } return 0; } void Output(int *Data,int m) { //输出构造的数据 int i = 0; do { printf("%d/n",Data[i++]); }while(i < m); }

     

     

    很简单的,提供出来只是为了练练而已。(其实这是以前写的代码,只是增强可读性优化了一下.)


    最新回复(0)