C语言实现4种常用排序
实在没事搞,反正面试也要用到,继续来写4种排序算法。因为那天用java写了排序,突然想到我是要面试IOS,起码也得用C写。C竟然忘干净了,方法都不会写了。囧啊!
下面用C实现4种排序算法:快速排序、冒泡排序、选择排序、插入排序。(我是用Xcode写的)
1、快速排序
什么都不说了直接上代码吧:
#pragma -mark 快速排序 void quickSort(int array[],int low,int high) { if (array == NULL) { return; } if (low >= high) { return; } //取中值 int middle = low +(high - low)/2; int prmt = array[middle]; //开始排序使得left < prmt 同时右边的大于 prmt int i = low,j = high; while (i <= j) { while (array[i] < prmt) { i++; } while (array[j] > prmt) { j--; } if (i <= j) { int temp = array[i]; array[i] = array[j]; array[j] = temp; i++; j--; } printf("排序中:"); printArray(array,7); } //对左边的进行排序处理 if (low < j) { quickSort(array, low, j); } if (high > i) { quickSort(array, i, high); } }快速排序过程如下:
排序前:9 2 10 7 3 7 4 排序中:4 2 10 7 3 7 9 排序中:4 2 7 7 3 10 9 排序中:4 2 7 3 7 10 9 排序中:2 4 7 3 7 10 9 排序中:2 4 3 7 7 10 9 排序中:2 3 4 7 7 10 9 排序中:2 3 4 7 7 9 10 排序中:2 3 4 7 7 9 10 排序后:2 3 4 7 7 9 102、冒泡排序
还是直接上代码吧,代码君在下面:
#pragma -mark 冒泡排序 void buddleSort(int *array,int length) { if (array == NULL) { return; } for (int i = 1; i < length; i++) { for (int j = 0; j < length - i; j++) { if (array[j] > array[j+1]) { int temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; } printf("排序中:"); printArray(array,length); } } }冒泡排序的过程如下:
排序前:9 2 10 7 3 7 4 排序中:2 9 10 7 3 7 4 排序中:2 9 10 7 3 7 4 排序中:2 9 7 10 3 7 4 排序中:2 9 7 3 10 7 4 排序中:2 9 7 3 7 10 4 排序中:2 9 7 3 7 4 10 排序中:2 9 7 3 7 4 10 排序中:2 7 9 3 7 4 10 排序中:2 7 3 9 7 4 10 排序中:2 7 3 7 9 4 10 排序中:2 7 3 7 4 9 10 排序中:2 7 3 7 4 9 10 排序中:2 3 7 7 4 9 10 排序中:2 3 7 7 4 9 10 排序中:2 3 7 4 7 9 10 排序中:2 3 7 4 7 9 10 排序中:2 3 7 4 7 9 10 排序中:2 3 4 7 7 9 10 排序中:2 3 4 7 7 9 10 排序中:2 3 4 7 7 9 10 排序中:2 3 4 7 7 9 10 排序后:2 3 4 7 7 9 103、选择排序
代码君,你在哪里:
#pragma -mark 选择排序 void selectSort(int array[],int length) { if (array == NULL) { return; } int min_index; for (int i = 0; i< length; i++) { min_index = i; for (int j = i+1; j < length; j++) { if (array[j] < array[min_index]) { int temp = array[j]; array[j] = array[min_index]; array[min_index] = temp; } printf("排序中:"); printArray(array,length); } } }选择排序的过程如下:
排序前:9 2 10 7 3 7 4 排序中:2 9 10 7 3 7 4 排序中:2 9 10 7 3 7 4 排序中:2 9 10 7 3 7 4 排序中:2 9 10 7 3 7 4 排序中:2 9 10 7 3 7 4 排序中:2 9 10 7 3 7 4 排序中:2 9 10 7 3 7 4 排序中:2 7 10 9 3 7 4 排序中:2 3 10 9 7 7 4 排序中:2 3 10 9 7 7 4 排序中:2 3 10 9 7 7 4 排序中:2 3 9 10 7 7 4 排序中:2 3 7 10 9 7 4 排序中:2 3 7 10 9 7 4 排序中:2 3 4 10 9 7 7 排序中:2 3 4 9 10 7 7 排序中:2 3 4 7 10 9 7 排序中:2 3 4 7 10 9 7 排序中:2 3 4 7 9 10 7 排序中:2 3 4 7 7 10 9 排序中:2 3 4 7 7 9 10 排序后:2 3 4 7 7 9 10
4、插入排序
继续上代码了:
#pragma -mark 插入排序 void insertSort(int array[],int length) { if (array == NULL) { return; } for (int i = 1; i < length; i++) { int temp = array[i]; int j = i-1; while (j >= 0 && array[j] > temp) { array[j+1] = array[j]; j--; printf("排序中:"); printArray(array,length); } array[j+1] = temp; } }插入排序的过程如下:
排序前:9 2 10 7 3 7 4 排序中:9 9 10 7 3 7 4 排序中:2 9 10 10 3 7 4 排序中:2 9 9 10 3 7 4 排序中:2 7 9 10 10 7 4 排序中:2 7 9 9 10 7 4 排序中:2 7 7 9 10 7 4 排序中:2 3 7 9 10 10 4 排序中:2 3 7 9 9 10 4 排序中:2 3 7 7 9 10 10 排序中:2 3 7 7 9 9 10 排序中:2 3 7 7 7 9 10 排序中:2 3 7 7 7 9 10 排序后:2 3 4 7 7 9 10最后,附上整个类文件吧!
// // main.c // SortUtil // // Created by Mac on 14-4-16. // Copyright (c) 2014年 KnightKing. All rights reserved. // #include <stdio.h> //打印数组 void printArray(int *array,int len) { for(int i = 0;i<len;i++){ printf("%d ",array[i]); } printf("\n"); } #pragma -mark 冒泡排序 void buddleSort(int *array,int length) { if (array == NULL) { return; } for (int i = 1; i < length; i++) { for (int j = 0; j < length - i; j++) { if (array[j] > array[j+1]) { int temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; } printf("排序中:"); printArray(array,length); } } } #pragma -mark 快速排序 void quickSort(int array[],int low,int high) { if (array == NULL) { return; } if (low >= high) { return; } //取中值 int middle = low +(high - low)/2; int prmt = array[middle]; //开始排序使得left < prmt 同时右边的大于 prmt int i = low,j = high; while (i <= j) { while (array[i] < prmt) { i++; } while (array[j] > prmt) { j--; } if (i <= j) { int temp = array[i]; array[i] = array[j]; array[j] = temp; i++; j--; } printf("排序中:"); printArray(array,7); } //对左边的进行排序处理 if (low < j) { quickSort(array, low, j); } if (high > i) { quickSort(array, i, high); } } #pragma -mark 选择排序 void selectSort(int array[],int length) { if (array == NULL) { return; } int min_index; for (int i = 0; i< length; i++) { min_index = i; for (int j = i+1; j < length; j++) { if (array[j] < array[min_index]) { int temp = array[j]; array[j] = array[min_index]; array[min_index] = temp; } printf("排序中:"); printArray(array,length); } } } #pragma -mark 插入排序 void insertSort(int array[],int length) { if (array == NULL) { return; } for (int i = 1; i < length; i++) { int temp = array[i]; int j = i-1; while (j >= 0 && array[j] > temp) { array[j+1] = array[j]; j--; printf("排序中:"); printArray(array,length); } array[j+1] = temp; } } int main(int argc, const char * argv[]) { int a[] = {9,2,10,7,3,7,4}; int length = 7; printf("排序前:"); printArray(a,length); //快速排序 // quickSort(a, 0, 6); //冒泡排序 // buddleSort(a,length); //选择排序 // selectSort(a, length); //插入排序 insertSort(a, length); printf("排序后:"); printArray(a,length); return 0; }