用直接插入排序对数组中的元素进行升序降序处理
代码如下
//对数组里的元素进行排序
#include<stdio.h>#include<conio.h>void downsort(int v[],int n); //降序函数声明 void downsort_2(int v[],int n); //降序函数声明 ,多一个参数的形式 void upsort(int v[],int n); //升序函数声明void upsort_2(int v[],int n); //升序函数声明,多一个参数的形式 main() { int a[8]={46,58,15,45,90,18,10,62}; int n=8;// upsort(a,n);// upsort_2(a,n);// downsort_2(a,n); downsort(a,n); _getch(); return(0);}void upsort(int a[],int n){ int i,j,temp; for(i=1;i<n;i++) { temp = a[i]; for(j=i;j>0 && temp<a[j-1];--j) { a[j] = a[j-1]; } a[j] = temp; } printf("数组a[]升序排列后:\n\a"); for(i=0;i<n;i++) { printf("a[%d]=%d\n",i,a[i]); }}void downsort(int a[],int n){ int i,j,temp; for(i=1;i<n;i++) { temp = a[i]; for(j=i;j>0 && temp>a[j-1];--j) { a[j-1] = a[j]; /*逻辑有点搞不清啦,这里赋值后a[j-1]的数据会丢失,能不能把downsort函数写的跟upsort函数一样写的那样短小精悍,downsort_2多了个变量,效率也低。 */ } } printf("数组a[]降序排列后:\n\a"); for(i=0;i<n;i++) { printf("a[%d]=%d\n",i,a[i]); }}void upsort_2(int a[],int n){ int i,j,temp,big; for(i=1;i<n;i++) { temp = a[i]; for(j=i;j>0 && temp<a[j-1];--j) { big = a[j]; a[j] = a[j-1]; a[j-1] = big; } } printf("数组a[]升序排列后:\n\a"); for(i=0;i<n;i++) { printf("a[%d]=%d\n",i,a[i]); }}void downsort_2(int a[],int n){ int i,j,temp,small; for(i=1;i<n;i++) { temp = a[i]; for(j=i;j>0 && temp>a[j-1];--j) { small = a[j-1]; a[j-1] = a[j]; a[j] = small; } } printf("数组a[]降序排列后:\n\a"); for(i=0;i<n;i++) { printf("a[%d]=%d\n",i,a[i]); }}void InsertSort(int array[], int length)//直接插入排序{ int i, j; int key;//存储将要插入的数据 printf("InsertSort\n"); for(i = 1; i < length; i++) { if(array[i] < array[i - 1]) { key = array[i]; for(j = i - 1; key < array[j]; j--) array[j + 1] = array[j]; array[j + 1] = key; } }}