这些排序只给出了算法,没有实现思路,也省略了swap函数的定义,别问为什么,因为懒.
void BubbleSort(){
int a[N];
for(int i=0;i<N-1;i++){
for(int j=0;j<N-1;j++){
if(a[j]>a[j+1]) swap(&a[j],&a[j+1]);
}
}
}
当数组元素部分有序时,也可以再定义一个变量,作为排序是否进行的判断条件.
void BubbleSortII(){
int a[N];
for(int i=0;i<N-1;i++){
int flag=0;
for(int j=0;j<N-1-i;j++){
if(a[j]>a[j+1]) {
swap(&a[j],&a[j+1]);
flag=1;
}
}
if(flag==0) break;
}
}
void SelectSort(){
int a[N];
for(int i=0;i<N-1;i++){
int min=i;
for(int j=i+1;j<N-1;j++){
if(a[j]<a[min]) min=j;
}
swap(&a[i],&a[min]);
}
}
void InsertSort(){
int a[N];
for(int i=1;i<N;i++){
int temp=a[i];
int j=0;
for(j=i-1;j>=0;j--){
if(a[j]>temp) a[j+1]=a[j];
else break;
}
a[j+1]=temp;
}
}
#include
#define N 10
void ShellSort(int*a,int len,int gap);
void main(){
int a[N];
for(int i=0;i<N;i++){
scanf("%d",&a[i]);
}
int gap[]={
5,3,1};
for(int temp=0;temp< sizeof(gap)/ sizeof(gap[0]);temp++){
ShellSort(a,N,gap[temp]);
}
for(int i=0;i<N;i++){
printf("%d",a[i]);
}
}
void ShellSort(int*a,int len,int gap){
for(int i=0;i<gap;i++){
//对分了组的元素进行直接插入排序
for(int j=gap;j<len;j+=gap){
int temp=a[j];
int k=j-gap;
for(;k>=0;k-=gap){
if(a[k]>temp) a[k+gap]=a[k];
else break;
}
a[k+gap]=temp;
}
}
}
int QuickSort(){
int a[N];
int low=0;
int high=N-1;
while(low<high){
while(low<high&&a[high]>=a[low]) high--;
swap(&a[high],&a[low]);
while(low<high&&a[low]<=a[high]) low++;
swap(&a[high],&a[low]);
}
return low;
}//快排后,原数组首元素将数组分成两部分,只需再分别对这两部分进行排序即可,这里省略
#include
#define N 10
void swap (int array[], int i, int j){
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
void printAaray(int array[] ,int len){
for(int i=0; i < len; i++) printf("%d ", array[i]);
printf("\n");
}
/* 调整堆 */
void heap_ajust(int arr[], int start, int end) {
//建立父节点下标和子节点下标
int dad = start;
int son = dad * 2 + 1;
while (son <= end) {
//
if (son + 1 <= end && arr[son] < arr[son + 1]) //先比较两個子节点大小,选择最大的
son++;
if (arr[dad] > arr[son]) break;
else {
swap(arr,dad,son);
dad = son;
son = dad * 2 + 1;
}
}
}
/* 堆排序 */
void heap_sort(int arr[], int len) {
int i;
//初始化堆,i从最后一個父节点开始调整
// 建立最大堆
for (i = len / 2 - 1; i >= 0; i--) {
heap_ajust(arr, i, len - 1);
}
//先将第一個元素和已排好元素前一位做交换,再从新调整,直到排序完毕
for (i = len - 1; i > 0; --i) {
swap(arr,0,i);
heap_ajust(arr, 0, i-1);
}
}
void main(int argc, char const *argv[]) {
int a[N];
for(int i=0;i<N;i++) scanf("%d",&a[i]);
heap_sort(a, N);
printAaray(a,N);
}
#include
#define N 10
void Mergesort(int *num,int left,int right);
void Merge(int *num,int left,int middle,int right);
void swap(int *a,int *b);
void main()
{
int a[N];
for(int i=0;i<N;i++) scanf("%d",&a[i]);
Mergesort(a,0,N-1);
for(int i=0;i<N;i++)printf("%d ",a[i]);
}
void Mergesort(int *num,int left,int right)
{
int middle=(left+right)/2;
if(left==right) break;
Mergesort(num,left,middle);
Mergesort(num,middle+1,right);
Merge(num,left,middle,right);
}
void Merge(int *num,int left,int middle,int right)
{
//先对左部分进行排序,再依次向其中插入右部分元素
for(int i=middle+1;i<=right;i++)
{
for(int j=i;j>left;j--)
{
if(num[j]<num[j-1]) swap(&num[j],&num[j-1]);
}
}
}
void swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
#include
#define Max_ 10 //数组个数
#define RADIX_10 10 //整形排序
#define KEYNUM_31 10 //关键字个数,这里为整形位数
void Show(int arr[], int n)
{
int i;
for ( i=0; i<n; i++ )
printf("%d ", arr[i]);
printf("\n");
}
// 找到num的从低到高的第pos位的数据
int GetNumInPos(int num,int pos)
{
int temp = 1;
for (int i = 0; i < pos - 1; i++)
temp *= 10;
return (num / temp) % 10;
}
//基数排序 pDataArray 无序数组;iDataNum为无序数据个数
void RadixSort(int* pDataArray, int iDataNum)
{
int *radixArrays[RADIX_10]; //分别为0~9的序列空间
for (int i = 0; i < 10; i++)
{
radixArrays[i] = (int *)malloc(sizeof(int) * (iDataNum + 1));
radixArrays[i][0] = 0; //index为0处记录这组数据的个数
}
for (int pos = 1; pos <= KEYNUM_31; pos++) //从个位开始到31位
{
for (int i = 0; i < iDataNum; i++) //分配过程
{
int num = GetNumInPos(pDataArray[i], pos);
int index = ++radixArrays[num][0];
radixArrays[num][index] = pDataArray[i];
}
for (int i = 0, j =0; i < RADIX_10; i++) //收集
{
for (int k = 1; k <= radixArrays[i][0]; k++)
pDataArray[j++] = radixArrays[i][k];
radixArrays[i][0] = 0; //复位
}
}
}
int main()
{
int arr_test[Max_];
for(int i=0;i<Max_;i++) scanf("%d",&arr_test[i]);
RadixSort( arr_test, Max_);
Show( arr_test, Max_ );
return 0;
}
反正也没人看,就怎么随便怎么写了