快速排序1亿个随机浮点数,居然用了400多秒。。。
Intel(R) Core(TM)2 Duo CPU E7500 @2.93GHz
483秒
怎么来优化?
#include<stdio.h>#include<stdlib.h>#include<time.h>#define MAX_NUMBER 100000000void create_random_numbers(float *numbers,int count){ srand((unsigned)time(NULL)); for(int i = 0; i < count;++i) { numbers[i] = (float)rand()/RAND_MAX*MAX_NUMBER; }}void display_numbers(float *numbers,int count){ for(int i = 0; i < count; ++i) { if((i+1)%5 == 0) { putchar('\n'); } printf("%.3f ",numbers[i]); } putchar('\n');}void quicksort(float *numbers,int start,int end){ if(start >= end) return; float key = numbers[start]; int i_start = start; int i_end = end; for(;;) { while(numbers[i_end] > key && i_start < i_end) { --i_end; } if(i_start >= i_end) break; numbers[i_start++] = numbers[i_end]; while(numbers[i_start] <= key && i_start < i_end) { ++i_start; } if(i_start >= i_end) break; numbers[i_end--] = numbers[i_start]; } numbers[i_start] = key; quicksort(numbers,start,i_start-1); quicksort(numbers,i_start+1,end);}int main(void){ int NUM_COUNT=0; time_t start_time,end_time; printf("How many numbers do you want to sorting test: "); scanf("%d",&NUM_COUNT); float *numbers = (float*)malloc(sizeof(float)*NUM_COUNT); create_random_numbers(numbers,NUM_COUNT); puts("create random finished!"); printf("----------------------------------\n"); puts("sorting...."); time(&start_time); quicksort(numbers,0,NUM_COUNT-1); time(&end_time); printf("used %d seconds!\n",end_time-start_time); getchar(); puts("quick sort finished ,would you want to display the number?"); char choice = getchar(); if(choice == 'y') { display_numbers(numbers,NUM_COUNT); } free(numbers); return 0;}
free( numbers );
}