几个排序算法

//

//  main.m

//  SortDemo

//

//  Created by PSH_Chen_Tao on 10/28/13.

//  Copyright (c) 2013 wolfman. All rights reserved.

//

 

#import <Foundation/Foundation.h>

void insertSort(int arr[],int n);

void insertSort1(int arr[],int n);

void selectSort(int arr[],int n);

 

void quickSort(int arr[],int start ,int n);

 

void shellSort(int arr[] , int n);

int main(int argc, const char * argv[])

{

    int arr[] = {14,2,6,85,12,45,75,95,32,651,452,213,22};

    for (int n = 0; n < sizeof(arr)/sizeof(int); n++) {

        printf("%d \t",arr[n]);

    }

    

    printf("\n\n\n");

    

    insertSort(arr, sizeof(arr)/sizeof(int));

    for (int n = 0; n < sizeof(arr)/sizeof(int); n++) {

        printf("%d \t",arr[n]);

    }

    

    printf("\n\n\n");

    

    ///////

    

    int arr1[] = {14,2,6,85,12,45,75,95,32,651,452,213,22};

    for (int n = 0; n < sizeof(arr1)/sizeof(int); n++) {

        printf("%d \t",arr1[n]);

    }

    

    printf("\n\n\n");

    

    insertSort1(arr1, sizeof(arr1)/sizeof(int));

    for (int n = 0; n < sizeof(arr1)/sizeof(int); n++) {

        printf("%d \t",arr1[n]);

    }

    

    printf("\n\n\n");

    

    

 

    int arr2[] = {14,2,6,85,12,45,75,95,32,651,452,213,22};

    for (int n = 0; n < sizeof(arr2)/sizeof(int); n++) {

        printf("%d \t",arr2[n]);

    }

    

    printf("\n\n\n");

    

    selectSort(arr2, sizeof(arr1)/sizeof(int));

    for (int n = 0; n < sizeof(arr2)/sizeof(int); n++) {

        printf("%d \t",arr2[n]);

    }

    

    printf("\n\n\n");

    

    ///////////

    printf("quick sort !\n");

    int arr3[] = {14,2,6,85,12,45,75,95,32,651,452,213,22};

    for (int n = 0; n < sizeof(arr3)/sizeof(int); n++) {

        printf("%d \t",arr3[n]);

    }

    

    printf("\n\n\n");

    

    quickSort(arr3,0, sizeof(arr3)/sizeof(int));

    for (int n = 0; n < sizeof(arr3)/sizeof(int); n++) {

        printf("%d \t",arr3[n]);

    }

    

    printf("\n\n\n");

    

    

    ///////////

    printf("shell sort !\n");

    int arr4[] = {14,2,6,85,12,45,75,95,32,651,452,213,22};

    for (int n = 0; n < sizeof(arr4)/sizeof(int); n++) {

        printf("%d \t",arr4[n]);

    }

    

    printf("\n\n\n");

    

    shellSort(arr4, sizeof(arr1)/sizeof(int));

    for (int n = 0; n < sizeof(arr4)/sizeof(int); n++) {

        printf("%d \t",arr4[n]);

    }

    

    printf("\n\n\n");

    

    return 0;

}

 

void insertSort(int arr[],int n){

    if (arr == NULL) {

        printf("arr = NULL \n");

        return;

    }

    int i = 0;

    int j = 0;

    int k = 0;

    int temp = -1;

    for ( i = 1; i < n; i++) {

        for ( j = i-1; j >= 0;  j--) {

            if (arr[i] >= arr[j]) {

                break;

            }

        }

        

        if (j != i-1) {

            temp = arr[i];

            for ( k = i-1; k > j; k--) {

                arr[k+1] = arr[k];

            }

            

            arr[j+1] = temp;

        }

    }

}

 

 

void insertSort1(int arr[],int n){

    int i = 0;

    int j = 0;

    int temp = -1;

    for (i = 1; i < n; i++) {

        if (arr[i] < arr[i - 1]) {

            temp = arr[i];

            for (j = i-1; j>=0 && arr[j] > temp; j--) {

                arr[j + 1] =  arr[j];

            }

            arr[j+1] = temp;

        }

    }

}

 

 

void selectSort(int arr[],int n){

    

    int minIndex = 0;

    int temp = -1;

    for (int i = 0; i < n; i++) {

        minIndex = i;

        for (int j=i+1; j < n; j++) {

            if (arr[j] < arr[minIndex]) {

                minIndex = j;

            }

        }

        

        temp = arr[i];

        arr[i] = arr[minIndex];

        arr[minIndex] = temp;

    }

}

 

void quickSort(int arr[],int start ,int n){

    if (start < n) {

        int low = start;

        int high = n-1 ;

        int key = arr[low];

        while (low < high) {

            

            while (low < high && arr[high] >= key) {

                high --;

            }

            arr[low] = arr[high];

            

            while (low < high && arr[low] < key) {

                low ++;

            }

            

            arr[high] = arr[low];

        }

        

        arr[low] = key;

        quickSort(arr, start,low);

        quickSort(arr, low+1,n);

 

    }

    

}

 

 

void shellSort(int arr[] , int n){

    int gap = -1;

    int j = -1;

    int temp = -1;

    int k = -1;

    for (gap=n/2; gap > 0; gap/=2) {

        for (j=gap; j < n; j++) {

            if (arr[j] < arr[j - gap]) {

                temp = arr[j];

                for (k = j-gap; k>=0 && arr[k] > temp; k-=gap) {

                    arr[k+gap] = arr[k];

                }

                arr[k+gap] = temp;

            }

        }

    }

    

}

 

 

posted @ 2013-10-31 10:18  Forty_two  阅读(163)  评论(0)    收藏  举报