数列排序

其实用现成的c++ 库中的sort排序就可以完美解决 但是为了体会算法的本质 我还要敲一遍别的

问题描述
给定一个长度为n的数列,将这个数列按从小到大的顺序排列。
1<=n<=200
输入格式
第一行为一个整数n。
第二行包含n个整数,为待排序的数,每个整数的绝对值小于
10000。
输出格式
输出一行,按从小到大的顺序输出排序后的数列。
样例输入
5
8 3 6 4 9
样例输出
3 4 6 8 9
 1 //快速排序算法
 2 #include "stdio.h"
 3 #include "stdlib.h"
 4 void Print(int data[],int n)//输出函数
 5 {
 6     int i;
 7     for(i=0;i<n;i++)
 8     {
 9     printf("%2d",data[i]);
10     }
11 }
12 int Splid(int *data,int pre,int rear)//取 mid
13 {
14     int temp=data[pre];
15     if(pre<rear)
16     {
17         while(data[rear]>=temp&&pre<rear)
18             rear--;
19         data[pre]=data[rear];
20         while(data[pre]<temp&&pre<rear)
21             pre++;
22         data[rear]=data[pre];
23     }
24     data[pre]=temp;
25     return pre;
26 }
27 void Quicksort(int *data,int pre,int rear)//递归排序
28 {
29     int mid;
30     if(pre<rear)
31         
32     {
33         mid=Splid(data,pre,rear);
34         Quicksort(data,pre,mid-1);
35         Quicksort(data,mid+1,rear);
36     }
37 }
38 int main(void)
39 {
40     int n,i;
41     int *data;
42     data=(int *)malloc(sizeof(int)*n);//动态分配
43     printf("Enter n:");
44     scanf("%d",&n);
45     for(i=0;i<n;i++)
46     {
47         scanf("%d",&data[i]);
48     }
49     Quicksort(data,0,n-1);//排序
50     Print(data,n);//输出
51     return 0;
52 }

 关于快速排序:https://www.runoob.com/w3cnote/quick-sort.html

 1 #include <stdio.h>
 2 void swap(int* a, int *b)
 3 {
 4     int c = *a;
 5     *a = *b;
 6     *b = c;
 7     printf("%d %d
",*a,*b);
 8 }
 9 void sort(int* arr, int len)
10 {
11     if (len <= 1) return;
12     int x = arr[len-1];
13     int i = 0, j = 0;
14     while (j < len - 1)
15     {
16         if (arr[j] < x){
17             swap(&arr[i], &arr[j]);
18         i++;
19     }
20     j++;
21 }
22 swap(&arr[i], &arr[len-1]);
23 sort(arr, i);
24 sort(arr + i + 1, len - i - 1);
25 }
26 int main(void)
27 {
28     int i, n, a[200];
29     scanf("%d", &n);
30     for (i = 0; i < n; i++)
31         scanf("%d", &a[i]);
32     sort(a, n);
33     for (i = 0; i < n; i++)
34         printf("%d ", a[i]);
35     printf("
");
36     return 0;
37 }
原文地址:https://www.cnblogs.com/ranzhong/p/13735302.html