資源限制
時間限制:1.0s 內存限制:512.0MBc++
問題描述
給定一個長度爲n的數列,將這個數列按從小到大的順序排列。1<=n<=200算法
輸入格式
第一行爲一個整數n。第二行包含n個整數,爲待排序的數,每一個整數的絕對值小於10000。ide
輸出格式
輸出一行,按從小到大的順序輸出排序後的數列。函數
樣例輸入
5
8 3 6 4 9ui
樣例輸出
3 4 6 8 9spa
快排排序方式代碼展現
#include<cstdio> #include<stdlib.h> using namespace std; // 該算法查找序列中第一個值的最終位置,並對序列進行一次排序 int location(int *arys,int start,int end) { int temp = arys[start]; //如下while中的算法不明白能夠畫圖推算 while(start<end) { if(arys[end]>temp)end--;//從尾部向前查找第一個比temp值小的值end arys[start]=arys[end];//將end值存入偏頭部start值 if(arys[start]<temp)start++;//從頭部向後查找第一個比temp值大的值start arys[end]=arys[start];//將start值存入偏尾部end位置 } arys[start]=temp;//將序列中的第一個值放到最終位置 return start; } //遞歸進行快排排序 int quick_sort(int *arys,int start,int end) { //快排未結束標誌 if(start<end) { int n = location(arys,start,end);//查找序列中第一個值的最終位置 quick_sort(arys,start,n-1);//對序列從start位置到n-1位置進行快排 quick_sort(arys,n+1,end);//對序列從n+1位置到end位置進行快排 } } int main() { int arys[200]={0},n;//定義並初始化序列arys,定義n值 scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&arys[i]); } quick_sort(arys,0,n-1);//對arys進行快排 for(int i =0;i<n;i++) { printf("%d ",arys[i]); } system("pause"); return 0; }
快排排序方式算法之個人總結
交換排序方式代碼展現
#include<cstdio> #include<stdlib.h> using namespace std; int main() { int arys[200]={0},n;//定義並初始化序列arys,定義n值 scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&arys[i]); } //進行交換排序 int min=0,mid;//min爲序列中最小值得位置,mid爲交換的中間過渡值 //從第i值開始,將從第i+1個值到n-1值中最小的值與第n個值交換,i從0到n-1. for(int i=0;i<n;i++) { min = i; //記錄i+1到n-1對應arys中最小值的位置 for(int j=i+1;j<n;j++) { if(arys[j]<arys[min]) { min = j; } } if(min!=i)//這裏使用剪支法,若min值爲i值也就是沒有進行上面的記錄for循環 { mid = arys[min]; arys[min] = arys[i]; arys[i] = mid; } } //打印排序後的arys序列 for(int i =0;i<n;i++) { printf("%d ",arys[i]); } system("pause"); return 0; }
交換排序算法之個人總結