- /*
- 输入任意几个整数,把这几个数由小到大输出。
- */
- #include <stdio.h>
- #include <math.h>
- #include <string.h>
- void select_sort(int *m, int n);
- void bubble_sort(int *m, int n);
- void insert_sort(int *m, int n);
- int main(void)
- {
- char t[1024] = "",*p;
- int m[100], n = 0, i, j, k;
- printf("输入任意个数,用空格分开:");
- gets(t);
- //将输入的字符串分割成 n 个整数。
- p = strtok(t, " ");
- m[0] = atoi(p);
- while(p = strtok(NULL, " "))
- m[++n] = atoi(p);
- //排序
- select_sort(m, n+1);
- //输出结果
- for(i=0; i<=n; i++)
- printf("%d\\n",m[i]);
- }
- /*选择排序
- 在要排序的一组数中,选出最小的一个数与第一个位置的数交换;
- 然后在剩下的数当中再找最小的与第二个位置的数交换,
- 如此循环到倒数第二个数和最后一个数比较为止。
- */
- void select_sort(int *m, int n)
- {
- int i, j, k;
- for(i=0; i<n; i++)
- for(j=i+1; j<n; j++)
- if(m[i] > m[j])
- {
- k = m[i];
- m[i] = m[j];
- m[j] = k;
- }
- }
- /*冒泡排序
- 在要排序的一组数中,对当前还未排好序的范围内的全部数,
- 自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。
- 即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。
- */
- void bubble_sort(int *m, int n)
- {
- int i, j, k;
- for(i=0; i<n; i++)
- for(j=0; j<n-i; j++)
- if(m[j] > m[j+1])
- {
- k = m[j];
- m[j] = m[j+1];
- m[j+1] = k;
- }
- }
- /*插入排序
- 在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,
- 现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。
- 如此反复循环,直到全部排好顺序。
- */
- void insert_sort(int *m, int n)
- {
- int i, j, k;
- for (i=1; i<n; i++)
- {
- k = m[i];
- for (j=i-1; j>=0 && k<m[j]; j--)
- m[j+1] = m[j];
- m[j+1] = k;
- }
- }
- //该片段来自于http://www.codesnippet.cn/detail/170720134650.html
来源: http://www.codesnippet.cn/detail/170720134650.html