C 练习实例37 - 排序
题目:对10个数进行排序。
程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换, 下次类推,即用第二个元素与后8个进行比较,并进行交换。
实例
// Created by study.p2hp.com on 15/11/9.
// Copyright © 2015年 高手教程. All rights reserved.
//
#include<stdio.h>
#define N 10
int main()
{
int i,j,a[N],temp;
printf("请输入 10 个数字:\n");
for(i=0;i<N;i++)
scanf("%d",&a[i]);
for(i=0;i<N-1;i++)
{
int min=i;
for(j=i+1;j<N;j++)
if(a[min]>a[j]) min=j;
if(min!=i)
{
temp=a[min];
a[min]=a[i];
a[i]=temp;
}
}
printf("排序结果是:\n");
for(i=0;i<N;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
以上实例输出结果为:
请输入 10 个数字: 23 2 27 98 234 1 4 90 88 34 排序结果是: 1 2 4 23 27 34 88 90 98 234
C 语言经典100例



algorithm
522***405@qq.com
参考地址
基础算法之简单选择排序(selection sort)
1,名 称:简单选择排序
2,复杂度:O(n^2)
3,实现方式:C语言
4,空间复杂度:O(1)
5,稳定性:不稳定
6,算法思想:总共遍历两次,外层循环是算法总共要至执行的此数,那么为什么呢?因为该算法每一次执行外层循环会进行一次交换,默认i所在的位置是最大或者最小(要根据升序还是降序确定),然后里层循环是确定要交换的数字,请具体的思想请大家去代码中体会吧!
7,算法种类:升序(ascending order)、降序(descending order)
8,算法实现代码:
#include "stdio.h" #include "conio.h" void swap(int *a, int *b){ int temp ; temp = *a; *a = *b; *b = temp; } //升序---简单选择排序 SelectionSortAsc(int *a,int n){ int i,j,min; for( i = 0;i < 10; i++){ min = i; for(j = i+1;j < 10; j++){ if(a[j] < a[min]){ min = j; } } if(min != i) swap(&a[i],&a[min]); } printf("\n ascending order:"); } //降序---简单选择排序 SelectionSortDesc(int *a,int n){ int i,j,max; for( i = 0;i < 10; i++){ max = i; for(j = i+1;j < 10; j++){ if(a[j] > a[max]){ max = j; } } if(max != i) swap(&a[i],&a[max]); } printf("\n descending order:"); } main(){ int i; int a[20] = {10,8,6,5,3,2,9,7,4,1}; SelectionSortAsc(a,10); for(i = 0 ; i < 10; i++) printf("%d ",a[i]); printf("\n"); SelectionSortDesc(a,10); for(i = 0 ; i < 10; i++) printf("%d ",a[i]); getche(); }algorithm
522***405@qq.com
参考地址