#include <stdio.h>
#define ARR_LEN 255 /*数组长度上限*/
#define elemType int /*元素类型*/
/* 冒泡排序 */
/* 1. 从当前元素起,向后依次比较每一对相邻元素,若逆序则交换 */
/* 2. 对所有元素均重复以上步骤,直至最后一个元素 */
/* elemType arr[]: 排序目标数组; int len: 元素个数 */
void bubbleSort (int arr[], int len) {
int temp;
int i, j;
for (i=0; i<len-1; i++) /* 外循环为排序趟数,len个数进行len-1趟 */
for (j=0; j<len-1-i; j++) { /* 内循环为每趟比较的次数,第i趟比较len-i次 */
if (arr[j] > arr[j+1]) { /* 相邻元素比较,若逆序则交换(升序为左大于右,降序反之) */
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
void bubbleSort1(int *arr, int len)
{
int temp;
for (int i = 0; i<len-1; i++) { //比较n-1趟
int flag = 0;//提前退出冒泡排序的标志位
for (int j = 0; j<len-1-i; j++) { //每次做 leng-1 - i次比较
if (arr[j] > arr[j+1]) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
flag = 1;
}
}
if (!flag) break;
}
}
//插入排序
void insert_sort(int *array,unsigned int n)
{
int i,j;
int temp;
for(i=1;i<n;i++)
{
temp=array[i];
j=i-1;
//与“已排序”!的数逐一比较,大于temp时,该数移后
while((j>=0)&&(array[j]>temp))
{
array[j+1]=array[j];
j--;
}
//存在大于temp的数
if(j!=i-1)
array[j+1]=temp;
}
}
void insertSort(int *array,int n)
{
int i,j;
int temp;
for(i=1;i<n;i++)
{
temp=*(array+i);
for(j=i;j>0&&*(array+j-1)>temp;j--)
{
*(array+j)=*(array+j-1);
}
*(array+j)=temp;
}
}
void insertSort1(int *array,int n)
{
int i,j;
int temp;//临时变量
for (i = 1; i<n; i++) {
temp = array[i];
// temp=*(array+i);//
/*
比如有char array[10];那么array就是数组首地址,即&array[0];
也就是说array是一个指针,指向array[0];
那么array + i,等于&array[i];
那么*(array + i) 等于array[i];
*/
j = i - 1;
for (; j>=0; j--) { /* 从后向前比较 */
if (array[j] > temp) //x前面的数比它大
array[j+1] = array[j]; /* 将大数向后移动*/
else break; /* 找到插入的位置,退出 */
}
//与“已排序”!的数逐一比较,大于temp时,该数移后
// while((j>=0)&&(array[j]>temp))
// {
// array[j+1]=array[j];
// j--;
// }
//存在大于temp的数
if(j!=i-1)
array[j+1]=temp;
}
}
//选择排序
void select_sort(int list[], int n)
{
int i, j, min, temp = 0;
for (i = 0; i < n - 1; i++){
min = i;//查找最小值
for (j = i + 1; j < n; j++)
if (list[j] < list[min])
min = j;//记录最小值下标
if (min != i) {
temp = list[min];
list[min] = list[i];
list[i] = temp;
}
}
}
//归并排序
//快速排序
int main(int argc, const char * argv[]) {
int a[10] = {1,13,6,5,7};
// bubbleSort1(a, 3);
insertSort(a,5);
// printf("%d",a[0]);
for (int i = 0; i<10; i++) {
printf("%d\n",*(a+i));
}
return 0;
}
网友评论