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;
}
浙公网安备 33010602011771号