给定一个长度为 n 的数组 a 以及两个整数 l 和 r,请你编写一个函数,void sort(int a[], int l, int r),将 a[l]∼a[r] 从小到大排序。
输出排好序的数组 a。
Input
第一行包含三个整数 n,l,r。
第二行包含 n 个整数,表示数组 a。
Output
共一行,包含 n 个整数,表示排序完成后的数组 a。
数据范围 0≤l≤r<n≤1000
#include <stdio.h>
void sort(int a[],int l,int r)
{
int temp;
for(int i=0;i<r-l;i++){
for(int j=l;j<r-i;j++){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
int main()
{
int n,l,r;
scanf("%d%d%d",&n,&l,&r);
int a[n];
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
sort( a,l,r);
for(int i=0;i<n;i++){
printf("%d ",a[i]);
}
return 0;
}
例二:冒泡排序中数据交换的次数
听说过冒泡排序么?一种很暴力的排序方法。今天我们不希望你用它来排序,而是希望你能算出从小到大冒泡排序的过程中一共进行了多少次数据交换。
Input
输入数据的第一行为一个正整数 T ,表示有 T 组测试数据。 接下来T行,每行第一个整数N, 然后有N个整数,无序。0<N <= 100
Output
输出共 T 行。 每行一个整数,代表本行数据从小到大冒泡排序所进行的交换次数。
Examples
input
复制
3 5 1 2 3 4 5 4 5 3 7 1 2 2 1
output
复制
0 4 1
#include <stdio.h>
int main()
{
int T;
scanf("%d",&T);
while(T--){
int n,temp;
int count=0;
scanf("%d",&n);
int a[n];
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(int i=0;i<n-1;i++){
for( int j=0;j<n-1-i;j++){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
count++;
}
}
}
printf("%d\n",count);
}
}