问题一:选择排序算法
选择排序:
- 通过从起始位置挨个递增元素,与剩下元素比较。
- 按照顺序要求,进行必要的元素交换。
- 直到所有的元素都遍历完,即达到了排序的要求;
目标:实现输入任何数目的元素,用快速排序实现由小到大和由大到小的顺序排列;
实验代码:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop
1,选择排序:每次第i个元素与剩下的n-i个元素进行比较 ;
2,如果满足要求则进行元素的交换;
3,依次类推,直到比较到最后一个元素为止 ;
*/
void sort(int a[],int b[],int m);
int main(int argc, char *argv[]) {
int n;
printf("请输入待排列数据的个数:");
scanf("%d",&n);
int a[n],b[n];
int i,j,k,s;
printf("依次输入数据:");
for (i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(k=0;k<n;k++){
b[k]=a[k];
}
sort(a,b,n);
printf("请输出由大到小排列的数列:");
for(j=0;j<n;j++){
printf("%d ",a[j]);
}
printf("\n");
printf("请输出由小到大排列的数列:");
for(s=0;s<n;s++){
printf("%d ",b[s]);
}
return 0;
}
void sort(int a[],int b[],int m){
int i,j,k;
int max,min;
for(i=0;i<m-1;i++){
max=a[i];
min=b[i];
for(j=i+1;j<m;j++){
if(a[j]>max){
a[i]=a[j];
a[j]=max;
max=a[i];
}
if(b[j]<min){
b[i]=b[j];
b[j]=min;
min=b[i];
}
}
}
}
运行结果: