c语言 编写一个排序函数,实现对主函数中数组的升序排序.

作者&投稿:城可 (若有异议请与网页底部的电邮联系)
编写一个用选择法对一维数组升序排序的函数,并在主函数中调用该排序函数,实现对任意20个整数的排序。~

#include
#include
#include #define MAXlen 100void select_sort(int *x, int n) { //选择排序
int i, j, min;
int t;
for (i = 0; i < n - 1; i++) { // 要选择的次数:0~n-2共n-1次
min = i; // 假设当前下标为i的数最小,比较后再调整
for (j = i + 1; j < n; j++) { //循环找出最小的数的下标是哪个
if (*(x + j) < *(x + min)) {
min = j; // 如果后面的数比前面的小,则记下它的下标
}
}
if (min != i) { // 如果min在循环中改变了,就需要交换数据
t = *(x + i);
*(x + i) = *(x + min);
*(x + min) = t;
}
}
}int main() {
int i;
int iArr[MAXlen];
srand((unsigned int)time(NULL));
printf("
排序前:
");
for(i = 0 ; i < MAXlen ; i++) {
iArr[i] = (unsigned int)rand() % 1000;
if(i % 10 == 0) printf("%
");
printf("%5d",iArr[i]);
}
printf("
");
select_sort(iArr,MAXlen);
printf("
排序后:
");
for(i = 0 ; i < MAXlen ; i++) {
if(i % 10 == 0) printf("%
");
printf("%5d",iArr[i]);
}
printf("

");
return 0;
}

#include //选择排序算法,升序void sort(int *arr,int n){ int i,j,k; int tmp; for(i=0;i arr[j]) //如果发现比当前最小元素还小的元素,则更新记录最小元素的下标k k=j; }//如果最小元素的下标不是后面n-i+1的未排序序列的第一个元素,则需要交换第i个元素和后面找到的最小元素的位置 if(k != i) { tmp=arr[k]; arr[k]=arr[i]; arr[i]=tmp; } }}int main(){int a[10]={ -5,-9,-8,3,9,2,-28,101,-395,0};int i;sort(a,10);for(i=0;ia.exe-395 -28 -9 -8 -5 0 2 3 9 101

#include <stdio.h>
void mysort(int *p,int n){
int i,j,k;
for(i=0;i<n;i++){
for(k=i,j=k+1;j<n;j++)
if(p[k]>p[j])
k=j;
if(k-i)
j=p[k],p[k]=p[i],p[i]=j;
}
}
int main(int argc,char *argv[]){
int a[10]={100,90,80,70,60,50,40,30,20,10,},i;
mysort(a,10);
for(i=0;i<10;printf("%d ",a[i++]));
printf("
");
return 0;
}


void bubble_sort(int *a, int n)
{
int *p1 = a;
int *p2 = a;
int k;
int j;
for (int i = 0; i < n; i++)
{
p2 = p1;
p2++;
for (j = n - i - 1; j > 0; j--)
{
if (*p2 < *p1) // 升序
{
k = *p1;
*p1 = *p2;
*p2 = k;
}
p2++;
}
p1++;
}
}