T1
//插入排序
#include <stdio.h>
void PrintInsertSort(int A[],int N){
int i,j,Tmp;
for(i=1;i<N;i++){
Tmp=A[i];
for(j=i;j>0&&A[j-1]>Tmp;j--){
A[j]=A[j-1];
}
A[j]=Tmp;
for(int q=0;q<N;q++){
printf("%d,",A[q]);
}
printf("\n");
}
}
int main(){
int N;
scanf("%d",&N);
int A[N];
for(int i=0;i<N;i++){
scanf("%d,",&A[i]);
}
PrintInsertSort(A,N);
return 0;
}
//希尔排序,间隔N,N/2,~~~~~
T2
#include <stdio.h>
void PrintShellSort(int A[],int N){
int i,j,interval,Tmp;
for(interval=N/2;interval>0;interval/=2){
for(i=interval;i<N;i++){
Tmp=A[i];
for(j=i;j>=interval&&A[j-interval]<Tmp;j-=interval){
A[j]=A[j-interval];
}
A[j]=Tmp;
}
for(int q=0;q<N;q++){
printf("%d,",A[q]);
}
printf("\n");
}
}
int main(){
int N;
scanf("%d",&N);
int A[N];
for(int i=0;i<N;i++){
scanf("%d,",&A[i]);
}
PrintShellSort(A,N);
return 0;
}
//快速排序,三数中值
T3
#include <stdio.h>
#include <stdlib.h>
void exchange(int *A,int *B){
int a=*A;
*A=*B;
*B=a;
}
int Median3(int A[],int left,int right){
int mid=(left+right)/2;
if(A[left]>A[right])exchange(&A[left],&A[right]);
if(A[left]>A[mid])exchange(&A[left],&A[mid]);
if(A[mid]>A[right])exchange(&A[mid],&A[right]);
exchange(&A[mid],&A[right-1]);
return A[right-1];
}
void InsertSort(int A[],int left,int right){
for(int i=left+1;i<=right;i++){
int H=A[i],n=i;
for(;A[n-1]>H&&n>1;n--){
A[n]=A[n-1];
}
A[n]=H;
}
}
void Print(int A[]){
for(int i=0;i<10;i++)printf("%d,",A[i]);
printf("\n");
}
void QuickSort(int A[],int left,int right){
if(right-left<3) {
InsertSort(A,left,right);
printf("insert(%d,%d):",left,right-left+1);
Print(A);
}
else{
int T=Median3(A,left,right);
int i=0,j=right-1;
while(i<j){
while(A[i]<=T)i++;
while(A[j]>=T)j--;
if(i<j)exchange(&A[i],&A[j]);
}
exchange(&A[j+1],&A[right-1]);
printf("Qsort(%d,%d):",left,right);
Print(A);
QuickSort(A,left,j);
QuickSort(A,j+2,right);
}
}
int main(){
int A[10]={49,38,65,97,76,13,27,50,2,8};
int N;
scanf("%d",&N);
int i=0,j=8;
exchange(&A[N],&A[9]);
while(i<j){
while(A[i]<A[9])i++;
while(A[j]>A[9])j--;
if(i<j)exchange(&A[i],&A[j]);
}
exchange(&A[i],&A[9]);
printf("Qsort(0,9):");
Print(A);
QuickSort(A,0,i-1);
QuickSort(A,i+1,9);
}
//选择排序
T4
#include <stdio.h>
#include <stdlib.h>
void Swap(int *A,int*B){
int a=*A;
*A=*B;
*B=a;
}
void SeleteSort(int A[],int N){
for(int i=0;i<N-1;i++){
int M=i;
for(int n=i;n<N;n++){
if(A[n]<A[M])M=n;
}
Swap(&A[M],&A[i]);
for(int n=0;n<N;n++){
printf("%d,",A[n]);
}
printf("\n");
}
}
int main(){
int N;
scanf("%d",&N);
int A[N];
for(int i=0;i<N;i++){
scanf("%d,",&A[i]);
}
SeleteSort(A,N);
return 0;
}
//基排序
T5
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct stack{
int size;
int A[20];
}* STACK;
int f(int n,int m);
void OUTPUT(STACK* A,int N[]);
int main(){
STACK *A=(STACK*)malloc(sizeof(STACK)*10);
for(int i=0 ;i<10;i++){
A[i]=(STACK)malloc(sizeof(struct stack));
A[i]->size=0;
}
char input[100];
scanf("%s",input);
int N[100],num=0,n=0,t=0;
while(input[n]!='\n'&&input[n]!='\0'){
if(input[n]==','){
N[num++]=t;
t=0;
}
else{
t=t*10+(int)(input[n]-'0');
}
n++;
}
int M;
scanf("%d",&M);
for(int m=0;m<num;m++){
A[f(N[m],0)]->A[A[f(N[m],0)]->size++]=N[m];
}
OUTPUT(A,N);
for(int i=1;i<M;i++){
for(int m=0;m<num;m++){
A[f(N[m],i)]->A[A[f(N[m],i)]->size++]=N[m];
}
OUTPUT(A,N);
}
for(int i=0;i<num;i++){
printf("%d,",N[i]);
}
}
int f(int n,int m){
for(int i=0;i<m;i++){
n/=10;
}
return n%10;
}
void OUTPUT(STACK* A,int N[]){
int n=0;
for(int i=0;i<10;i++){
for(int m=0;m<A[i]->size;m++){
N[n++]=A[i]->A[m];
}
A[i]->size=0;
}
}
//归并排序
#include <stdio.h>
#include <stdlib.h>
void Merge(int A[],int size,int Ls,int Le,int Re){
int *B=(int *)malloc(sizeof(int)*size);
int Rs=Le+1,n=Ls,Q=Ls;
while(Ls<=Le&&Rs<=Re){
if(A[Ls]<A[Rs]){
B[n++]=A[Ls++];
}
else{
B[n++]=A[Rs++];
}
}
while(Ls!=Le+1){
B[n++]=A[Ls++];
}
while(Rs!=Re+1){
B[n++]=B[Re++];
}
for(int i=Re;i>=Q;i--){
A[i]=B[i];
}
}
void Mergesort(int A[],int size,int left,int right){
if(left<right){
int middle=(right+left)/2;
Mergesort(A,size,left,middle);
Mergesort(A,size,middle+1,right);
Merge(A,size,left,middle,right);
}
}
int main(){
int A[10]={9,8,7,6,5,4,3,2,1,0};
Mergesort(A,10,0,9);
for(int i=0;i<10;i++){
printf("%d ",A[i]);
}
}