//
// 都是维基百科复制来的,想要详细信息自己可以去搜索一下,那里的代码很经典的,比“谭”的好多了
//
插入排序
void insertion_sort(char array[], unsigned int first, unsigned int last)
{
int i,j;
int temp;
for (i = first+1; i<=last;i++)
{
temp = array[i];
j=i-1;
//与已排序的数逐一比较,大于temp时,该数移后
while((j>=first) && (array[j] > temp))
{
array[j+1] = array[j];
j--;
}
array[j+1] = temp; //被排序数放到正确的位置
}
}
使用标志的冒泡排序
void bubble_sort(int a[], const int size)
{
bool flag = true;
int temp = 0; /* Temporary value for swapping two elements */
for (int i = 0; i < size - 1; i ++)
{
flag = true;
for (int j = 0; j < size - i - 1; j ++)
{
if (a[j] > a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
flag = false;
} // end if
} // end for j = ...
if (flag == true)
break;
} // end for i = ...
}
简单选择排序
// selection sort function module in C
void selectionSort(int data[], int count)
{
int i, j, min, temp;
for (i = 0; i < count - 1; i++) {
/* find the minimum */
min = i;
for (j = i+1; j < count; j++)
if (data[j] < data[min])
min = j;
/* swap data[i] and data[min] */
temp = data[i];
data[i] = data[min];
data[min] = temp;
}
}
快速排序
void swap(int *a, int *b)
{
int t=*a; *a=*b; *b=t;
}
void quicksort(int arr[],int beg,int end)
{
if (end >= beg + 1)
{
int piv = arr[beg], k = beg + 1, r = end;
while (k < r)
{
if (arr[k] < piv)
k++;
else
swap(&arr[k], &arr[r--]);
}
if (arr[k] < piv){
r++;
swap(&arr[k],&arr[beg]);
quicksort(arr, beg, k);
quicksort(arr, r, end);
}else {
if (end - beg == 1)
return;
swap(&arr[--k],&arr[beg]);
quicksort(arr, beg, k);
quicksort(arr, r, end);
}
}
}
我给你所有的算法,你自己去组合一下就好了。。
1.直接插入排序:
算法:void InsSort(RecordType r[], int length)
/* 对记录数组r做直接插入排序,length为数组中待排序记录的数目*/
{
int i,j;
for (i=2; i<=length; i++)
{
r[0]=r[i]; /*将待插入记录存放到监视哨r[0]中*/
j=i-1;
while (r[0].key< r[j].key ) /* 寻找插入位置 */
{
r[j+1]= r[j];
j=j-1;
}
r[j+1]=r[0]; /*将待插入记录插入到已排序的序列中*/
}
} /* InsSort */
2.冒泡排序:
算法:void BubbleSort(RecordType r[], int length )
/*对记录数组r做冒泡排序,length为数组的长度*/
{
int n,i,j;
int change;
RecordType x;
n=length;
change=TRUE;
for ( i=1 ; i<= n-1 && change ;++i )
{
change=FALSE;
for ( j=1 ; j<= n-i ; ++j)
if (r[j].key > r[j+1].key )
{
x= r[j];
r[j]= r[j+1];
r[j+1]= x;
change=TRUE;
}
}
} /* BubbleSort */
3.快速排序:
算法:void QKSort(RecordType r[],int low, int high )
/*对记录数组r[low..high]用快速排序算法进行排序*/
{
int pos;
if(low
pos=QKPass(r, low, high); /*调用一趟快速排序,将枢轴元素为界划分两个子表*/
QKSort(r, low, pos-1); /*对左部子表快速排序*/
QKSort(r, pos+1, high); /*对右部子表快速排序*/
}
}
4.简单选择排序:
算法:void SelectSort(RecordType r[], int length)
/*对记录数组r做简单选择排序,length为数组的长度*/
{
int i,j,k;
int n;
RecordType x;
n=length;
for ( i=1 ; i<= n-1; ++i)
{
k=i;
for ( j=i+1 ; j<= n ; ++j)
if (r[j].key < r[k].key )
k=j;
if ( k!=i)
{
x= r[i];
r[i]= r[k];
r[k]=x;
}
}
} /* SelectSort */
这是你需要的四种排序的核心算法程序,你自己组合写个主函数调用即可,注意排序函数的排序顺序,自己根据需要改吧。。。。。