-
算法核心思路
for(i = 0;i<(n-1);i++) { if(a[i] > a[i+1]) { y = a[i]; a[i] = a[i+1]; a[i+1] = y; }
for(i_ = i ; a[i_] < a[i_-1] ; i_--) { //只对前面排列好的再进行排列,所以i不用改变 y = a[i_]; a[i_] = a[i_-1]; a[i_-1] = y; }
if(i_ - 1 < 0)//检测是否排列到第一项 break; else continue;
double y; int i; int i_; for(i = 0;i<(n-1);i++) { if(a[i] > a[i+1]) { y = a[i]; a[i] = a[i+1]; a[i+1] = y; for(i_ = i ; a[i_] < a[i_-1] ; i_--) { //只对前面排列好的再进行排列,所以i不用改变 y = a[i_]; a[i_] = a[i_-1]; a[i_-1] = y; if(i_ - 1 < 0)//检测是否排列到第一项 break; else continue; } } }
-
整个程序
#include<stdio.h> void inverted(double *a,int n); int main(void) { const int n = 10; double arr[n] = {2.3,44.5,217.0,17.5,22.4,3.4,87.4,0.2,6.9,1.1}; inverted(arr,n); int i; for(i = 0; i < n ; i++) printf("%.2f ",arr[i]); return 0; } void inverted(double *a,int n) { double y; int i; int i_; for(i = 0;i<(n-1);i++)//因为下面需要用a[i]与a[i+1]比较,所以要保证a[i+1]是个有效值 { if(a[i] > a[i+1]) { y = a[i]; a[i] = a[i+1]; a[i+1] = y; for(i_ = i ; a[i_] < a[i_-1] ; i_--) { //只对前面排列好的再进行排列,所以i不用改变 y = a[i_]; a[i_] = a[i_-1]; a[i_-1] = y; if(i_ - 1 < 0)//检测是否排列到第一项 break; else continue; } } } }
算法:以倒序排列一个数组
最新推荐文章于 2021-05-26 14:39:42 发布