----------------------
ASP.Net+Android+IOS开发、
.Net培训、期待与您交流! ----------------------
数组的排序法
一共有五种方法
输入数组
#include<stdio.h>
int main(){
int i;
int a[10];
for(i=0;i<10;i++){
printf("请输入数组a[%d]保存的数字:",i);
scanf("%d",&a[i]);
}
void test5(int left,int right,int a[]);
test5(0,9,a);
for(i=0;i<10;i++){
printf("a[%d]=%d\n",i,a[i]);
}
return 0;
}
选择排序法
void test1(int a[]){
int i,j,t,pos;
for (i=0; i<10; i++) {
t=a[i];
pos=i;
for (j=i+1; j<10; j++) {
if(t>a[j]){
t = a[j];
pos = j;
}
}
a[pos]=a[i];
a[i]= t;
}
}
冒泡排序法
//冒泡排序法
void test2(int a[]){
int i,j,t;
for (i=1; i<10; i++) {
for(j=9;j>=i;j--){
if(a[j]<a[j-1]){
t=a[j];
a[j]=a[j-1];
a[j-1]=t;
}
// printf("%d",a[j]);
}
}
}
交换排序法
//交换排序法
void test3(int a[]){
int i,j,t;
for (i=0; i<9; i++) {
for (j=i+1; j<10; j++) {
if(a[i]>a[j]){
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
}
插入排序法
//插入排序法
void test4(int a[]){
int i,t,pos;
for (i=1; i<10;i++) {
t = a[i];
pos = i - 1;
while ((pos>=0)&&(t<a[pos])) {
a[pos+1] = a[pos];
pos--;
}
a[pos+1] = t;
}
}
折半排序法
//折半排序法
void test5(int left,int right,int a[]){
int i,j,middle,t;
i=left;
j=right;
middle = a[(left+right)/2];
do{
while ((a[i]<middle)&&(i<right))
i++;
while((a[j]>middle)&&(j>left))
j--;
if (i<=j) {
t = a[i];
a[i] = a[j];
a[j] = t;
i++;
j--;
}
}while(i<=j);
if (left<j)
test5(left, j, a);
if(right>i)
test5(i,right,a);
}