// test1();//随即数组10个数(20-30)计算找出最大值和所有元素的和
// test2();//生成20个元素的数组 每个元素的取值范围在(30-70)之间求数组元素的和
//test3();//复制一个数组到另外一个数组里面
//test5();//随机生成(20-40)两个数组 相加放到另外一个数组里面
//test6();//选择排序
//test7();//快速排序
//
// main.m
// c 31 test
//
// Created by dq on 15/7/17.
// Copyright (c) 2015年 dq. All rights reserved.
//
#import <Foundation/Foundation.h>
#define N 10
void test1()
{
int a[9],max=0,sum=0;
for (int i=0; i<10; i++) {
a[i]=arc4random()%21+10;
if(a[i]>max)
{
max=a[i];
}
sum +=a[i];
}
printf("最大值%d总和%d",max,sum);
}
void test2()
{
int a[19],sum;
for (int i=0; i<9; i++) {
a[i]=arc4random()%31+40;
sum +=a[i];
}
printf("%d",sum);
}
void test3()
{
int a[N],b[N]={1,2,3,4,5,6,7,8,9,0};
for (int i=0; i<N; i++) {
a[i]=b[i];
}
for (int i=0; i<N; i++) {
printf("%d ",a[i]);
}
}
void test4()
{
int a[N],b[N],c[N];
for (int i=0; i<N; i++) {
a[i]=arc4random()%21+20;
b[i]=arc4random()%21+20;
c[i]=a[i]+b[i];
}
for (int i=0; i<N; i++) {
printf("%d ",c[i]);
}
}
void test5()// x选择排序
{
int a[N]={0,12,36,52,91,56,87,36,92,81};
for (int i=0; i<N; i++) {
for (int j = i+1; j<N; j++) {
if(a[i]>a[j])
{
int temp = a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
for (int i=0; i<N; i++) {
printf("%d ",a[i]);
}
}
void test6()
{
int count=0;
char a[]="i love ios,i want an ip5";
for (int i=0; i<strlen(a); i++) {
if(a[i]==' ')
{
count++;
}
}
printf("%d",count);
}
void test7()
{
char a[]="abcdef",b[N];
for (int i=0; i<strlen(a); i++) {
b[i]=a[strlen(a)-i-1];//这边因为数组是从0开始 所以最大要-1
}
printf("%s",b);
}
void InsertSort()
{
int a[N]={10,9,8,7,6,5,4,3,2,1};
for (int i=0; i<N-1;i++) {
if(a[i]>a[i+1])
{
int x =a[i+1];
int j=i;
//a[i+1]=a[i];
while (a[j]>x&&j>=0) {
a[j+1]=a[j];
j--;
}
a[j+1]=x;//最后哨位的值应该赋给 a[j+1]
}
}
for (int i=0; i<N; i++) {
printf("%d ",a[i]);
}
}
void swap(int *a,int *b)
{
int temp =*a;
*a=*b;
*b=temp;
}
int spolit(int a[],int low,int high)
{
int base=a[low];
while (low<high) {
while (low<high&&a[high]>=base) {//相等的情况要注意
high--;
}
swap(&a[low], &a[high]);
while (low<high&&a[low]<=base) {
low++;
}
swap(&a[low], &a[high]);
// if (a[low]==a[high]||low<high) {
// base =a[low];
// }
}
// for ( int i=0; i<N; i++) {
// printf( "%d ", a[i]);
// }
return low;
}
void quickSort(int a[],int low,int high)
{
if(high>=low){
int mid=spolit(a,low,high);
// printf( "\n%d ", mid);
quickSort(a,low,mid-1);
quickSort(a,mid+1,high);
}
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
// test1();//随即数组10个数(20-30)计算找出最大值和所有元素的和
// test2();//生成20个元素的数组 每个元素的取值范围在(30-70)之间求数组元素的和
//test3();//复制一个数组到另外一个数组里面
//test5();//随机生成(20-40)两个数组 相加放到另外一个数组里面
//test6();//选择排序
//test7();//快速排序
printf("\n");
//InsertSort();
int a[N]={10,8,3,5,7,2,1,8,5,7};
int low=0,high=N-1;
quickSort(a,low,high);
for (int i=0; i<N; i++)
{
printf("%2d ",a[i]);
}
}
return 0;
}