插入排序
//插入排序
void charupaixu(int inputArray[],int length){
int i,j;
int thisArray[length];//用来存接受的数组,以不更改原数组
for(i = 0;i<length;i++){
thisArray[i]= inputArray[i];
}
//算法正式开始
int temp;//用来保存当前被插入元素
for(i = 1;i<length;i++){
temp = thisArray[i];
j = i-1;
while(j>=0 && thisArray[j]>temp){//核心
thisArray[j+1] = thisArray[j];//冒泡
j--;
}
thisArray[j+1] = temp;
}
//打印
printf("插入排序后:");
int num;
for(num = 0;num<length;num++){
printf("%d,",thisArray[num]);
}
printf("\n");
}
选择排序
//选择排序
void xuanzepaixu(int inputArray[],int length){
int i,j,minlocation;
int thisArray[length];//用来存接受的数组,以不更改原数组
for(i = 0;i<length;i++){
thisArray[i]= inputArray[i];
}
//算法正式开始
int min;
int temp;//用于元素交换
for(i=0;i<length;i++){
min = thisArray[i];
j = i;
while(j<length){//求后排的最小元素
if(thisArray[j]<min){
//如果发现最小元素,则更新最小元素的值和位置
min = thisArray[j];
minlocation = j;
}
j++;//配合while
}
if(thisArray[i]>min){//如果后面的最小值小于前面,则交换
temp = thisArray[i];
thisArray[i] = min;
thisArray[minlocation] = temp;
}
}
//打印
printf("选择排序后:");
int num;
for(num = 0;num<length;num++){
printf("%d,",thisArray[num]);
}
printf("\n");
}
冒泡排序
//冒泡排序
void maopaopaixu(int inputArray[],int length){
int i,j,temp;
int thisArray[length];//用来存接受的数组,以不更改原数组
for(i = 0;i<length;i++){
thisArray[i]= inputArray[i];
}
//算法正式开始
for(i=0;i<length-1;i++){
for(j=0;j<length-1-i;j++){//注意j的条件,因为后排是有序数组,前排无序
if(thisArray[j]>thisArray[j+1]){
temp = thisArray[j+1];
thisArray[j+1] = thisArray[j];
thisArray[j] = temp;
}
}
}
//打印
printf("冒泡排序后:");
int num;
for(num = 0;num<length;num++){
printf("%d,",thisArray[num]);
}
printf("\n");
}
以下为总代码:
#include <stdio.h>
void charupaixu(int inputArray[],int length);
void xuanzepaixu(int inputArray[],int length);
void maopaopaixu(int inputArray[],int length);
int main(int argc, char** argv) {
int arr[] = {1,47, 2, 0, 4, 7, 98, 0, 12, 35, 99, 14};
int length = sizeof(arr)/sizeof(arr[0]);
//查看原数组
printf("原数组为:");
int i;
for(i = 0;i<length;i++){
printf("%d,",arr[i]);
}
printf("\n");
printf("长度为:%d\n",length);
charupaixu(arr,length);
xuanzepaixu(arr,length);
maopaopaixu(arr,length);
}
//插入排序
void charupaixu(int inputArray[],int length){
int i,j;
int thisArray[length];//用来存接受的数组,以不更改原数组
for(i = 0;i<length;i++){
thisArray[i]= inputArray[i];
}
//算法正式开始
int temp;//用来保存当前被插入元素
for(i = 1;i<length;i++){
temp = thisArray[i];
j = i-1;
while(j>=0 && thisArray[j]>temp){//核心
thisArray[j+1] = thisArray[j];//冒泡
j--;
}
thisArray[j+1] = temp;
}
//打印
printf("插入排序后:");
int num;
for(num = 0;num<length;num++){
printf("%d,",thisArray[num]);
}
printf("\n");
}
//选择排序
void xuanzepaixu(int inputArray[],int length){
int i,j,minlocation;
int thisArray[length];//用来存接受的数组,以不更改原数组
for(i = 0;i<length;i++){
thisArray[i]= inputArray[i];
}
//算法正式开始
int min;
int temp;//用于元素交换
for(i=0;i<length;i++){
min = thisArray[i];
j = i;
while(j<length){//求后排的最小元素
if(thisArray[j]<min){
//如果发现最小元素,则更新最小元素的值和位置
min = thisArray[j];
minlocation = j;
}
j++;//配合while
}
if(thisArray[i]>min){//如果后面的最小值小于前面,则交换
temp = thisArray[i];
thisArray[i] = min;
thisArray[minlocation] = temp;
}
}
//打印
printf("选择排序后:");
int num;
for(num = 0;num<length;num++){
printf("%d,",thisArray[num]);
}
printf("\n");
}
//冒泡排序
void maopaopaixu(int inputArray[],int length){
int i,j,temp;
int thisArray[length];//用来存接受的数组,以不更改原数组
for(i = 0;i<length;i++){
thisArray[i]= inputArray[i];
}
//算法正式开始
for(i=0;i<length-1;i++){
for(j=0;j<length-1-i;j++){//注意j的条件,因为后排是有序数组,前排无序
if(thisArray[j]>thisArray[j+1]){
temp = thisArray[j+1];
thisArray[j+1] = thisArray[j];
thisArray[j] = temp;
}
}
}
//打印
printf("冒泡排序后:");
int num;
for(num = 0;num<length;num++){
printf("%d,",thisArray[num]);
}
printf("\n");
}