1.注意先从后面开始比
编写一个函数,把整数序列分成两个部分,使得左边部分不大于右边
#include <stdio.h>
#include <stdlib.h>
void main()
{
int n;
scanf("%d",&n);
int* arr = (int *)malloc(sizeof(int)*n);
int i,j;
for(i = 0;i < n;i++)
{
scanf("%d",&arr[i]);
}
i = 0;
j = n-1;
int mid = arr[0];
int temp;
while(i < j)
{
while(arr[j] > mid && i < j)
{
j--;
}
arr[i] = arr[j];
while(arr[i] < mid && i < j)
{
i++;
}
arr[j] = arr[i];
}
arr[i] = mid;
for(i = 0;i < n;i++)
{
printf("%d\n",arr[i]);
}
}
快速排序完整算法
#include <stdio.h>
int Partition(int A[],int low,int high)
{
int pivot = A[low];
int i = low;
int j = high;
while(i < j)
{
while(i<j && A[j] >= pivot)
j--;
A[i] = A[j];
while(i < j && A[i] <= pivot)
i++;
A[j] = A[i];
}
A[i] = pivot;
return i;
}
void QuickSort(int A[],int low,int high)
{
if(low < high)
{
int pivot = Partition(A,low,high);
QuickSort(A,low,pivot-1);
QuickSort(A,pivot+1,high);
}
}
void main()
{
int A[8] = {6,1,3,2,8,10,5,0};
QuickSort(A,0,7);
for(int i = 0;i<8;i++)
printf("%d ",A[i]);
}