简单的一个快速排序,未优化。#include <stdio.h>
/*
* 根据a[m],把大于a[m]的值放在后面,把小于a[m]的值放在前面
* 例如:输入 2 3 1 4 5 1
* 1. 输出 2 1 1 4 5 3
* 2. 最终输出 1 1 2 4 5 3
* 那么这个就确定了数组中 a[m]数值排在第m。上述中2在排序后就是第3大的数字。
*
* */
int partition(int a[],int m, int p){
int temp,i,j,v;
int time=0;
v=a[m];
i=m+1;
j=p;
/*
* 这个循环就是为了输出1
* */
while( i <= j ){
if(a[i] < v)
i++;
if(a[j]>v)
j--;
if(j<i)
break;
if( a[i] >= v && a[j] <= v)
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
i++;
j--;
}
}
/*
* 这个是为了2. 最终输出
* */
if(a[j] < v){
a[m] = a[j];
a[j] = v;
}
/*
* 返回确定的j值位置
* */
return j;
}
int quicksort(int a[], int p, int q){
int j,i;
if( p < q ){
j=partition(a,p,q);
/*
* 用分治的方式排序
* 排序前部分和后一部分
* */
if( p<(j-1) ){
quicksort(a,p,j-1);
}
if((j+1) < q){
quicksort(a,j+1,q);
}
}
return 0;
}
int main () {
int value[10]={10,9,8,7,6,5,4,3,2,1};
int n;
n=sizeof(value)/sizeof(int);
printf("size is %d \n", n);
quicksort(value,0,n-1);
int i;
for(i=0; i<10; i++){
printf("number %d : %d \n", i, value[i]);
}
//可以使用该在线网站运行该程序
printf("hello https://tool.lu/\n");
return 0;
}