其实用现成的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 }