voidquick_sort(int arr[],int len){ if (len <= 1) return; srand((unsigned)time(NULL)); constint pivot = arr[rand() % len]; int i = 0, j = 0, k = len; while (i < k) { if (arr[i] < pivot){ swap(&arr[i], &arr[j]); i++;j++;} elseif (pivot < arr[i]){ swap(&arr[i], &arr[k-1]); k--;} else i++; } quick_sort(arr, j); quick_sort(arr + k, len - k); }
voidshell_sort(int arr[], int length){ int h = 1; while (h < length / 3) { h = 3 * h + 1; } while (h >= 1) { for (int i = h; i < length; i++) { for (int j = i; j >= h && arr[j] < arr[j - h]; j -= h) { swap(&arr[j], &arr[j - h]); } } h = h / 3; } }
intmain(){ int n; scanf("%d",&n); int guo[n+5]; guo[n]=0; for (int i = 0; i < n; ++i) { scanf("%d",&guo[i]); } int sum=0; int tili; quick_sort(guo,n); for (int i = 0; i < n-1; ++i) { shell_sort((guo+i),n-i); tili=0; tili+=(guo[i+1]+guo[i]); guo[i+1]+=guo[i]; sum+=tili; } printf("%d",sum); }
voidswap(per *a,per *b){ int t=a->time; a->time=b->time; b->time=t;
t=a->index; a->index=b->index; b->index=t; }
voidquick_sort(per arr[],int len){ if (len <= 1) return; srand((unsigned)time(NULL)); constint pivot = arr[rand() % len].time; int i = 0, j = 0, k = len; while (i < k) { if (arr[i].time < pivot){ swap(&arr[i], &arr[j]); i++;j++;} elseif (pivot < arr[i].time){ swap(&arr[i], &arr[k-1]); k--;} else i++; } quick_sort(arr, j); quick_sort(arr + k, len - k); }
intmain(){ int n; scanf("%d",&n); for (int i = 0; i < n; ++i) { person[i].index=i+1; scanf("%d",&person[i].time); } quick_sort(person,n); for (int i = 0; i < n; ++i) { printf("%d ",person[i].index); } printf("\n"); double sum=0; int shijian=0; for (int i = 0; i < n-1; ++i) { shijian+=person[i].time; sum+=shijian; } printf("%.2lf\n",1.0*sum/n); //?????我卡了半天,后面的1.0*sum/n是原本就有的,sum是int类型。 //然后本是int的sum变成double,去掉了1.0,就又过了两个,但是第一个却过不了。 //把1.0加上,就全部过了。离谱 }