读入一组数据(少于500个),将小于中位数的数据按照从小到大的顺序输出。
论述程序中使用到的排序算法思想
1条回答 默认 最新
学不会嵌入式的某人 2023-03-03 10:45关注提供一个C语言版本,使用随机数生成后 自行寻找中位数然后判断,最后通过快速排序 得出结果
#include <stdio.h> #include <stdlib.h> #include <time.h> void swap(int *a, int *b) { int tmp; tmp = *a; *a = *b; *b = tmp; } int partion(int *arr, int len) { int i, j; if(len <= 1) return 0; i = 0; j = len-1; while(i < j) { //找到右边小于左边值,则退出 while( arr[i] < arr[j] && i < j) //只要右边比左边大,j可以向左移动 { j--; } swap(&arr[i], &arr[j]); //找到左边大于右边值,则退出 while( arr[i] <= arr[j] && i < j) //只要右边比左边大,i可以向右移动 { i++; } swap(&arr[i], &arr[j]); } //返回支点 return i; } //快速排序 void quicksort(int *arr,int len) { if(len <= 1) return; int pivot = partion(arr, len); // display(arr, len); quicksort(arr, pivot); quicksort(arr+pivot+1, len-pivot-1); } void add(int *arr,int len) { int i=0; int j=0; int addr[len]; for(i=0;i<len;i++) { if((arr[i] > arr[len/2-1] )&&(arr[i]!=arr[len/2-1])) { addr[j] = arr[i]; j++; } } quicksort(addr,j); printf("\n"); printf("排序后的数组:"); for(i=0;i<j;i++) { printf("%d ",addr[i]); } } int main() { int i=0; int arr[20]; srand((int)time(0)); for(i=0;i<20;i++) { arr[i]=rand()%100+1; } printf("排序前的数组:"); for(i=0;i<20;i++) { printf("%d ",arr[i]); } add(arr,sizeof(arr)/4); }解决 无用评论 打赏 举报