几个排序算法
//
// 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;
}
}
}
}