排序:就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作
穩定性:在排序過程中,有相同的元素,經過排序以後,相同元素按照以前的順序未曾發生變化則稱這種排序是穩定的,反之不穩定。65342
內部排序:資料元素全部存放在記憶體中進行排序。
外部排序:資料元素太多不能同時放在記憶體中,根據排序過程的要求不能在內外存之間移動資料的排序。
#include#include//氣泡排序
void bublesort(int data, int n);
//快速排序
void quicksort(int data, int low, int high);
int findpos(int data, int low, int high);
//插入排序
void binsertsort(int data, int n);
//希爾排序
void shellsort(int data, int n);
//選擇排序
void selectsort(int data, int n);
//堆排序
void heapsort(int data, int n);
void swap(int data, int i, int j);
void heapadjust(int data, int i, int n);
//歸併排序
void mergesort(int data, int first, int last);
void merge(int data, int low, int mid, int high);
//基數排序
void radixsort(int data, int n);
int getnumpos(int num, int pos);
int main()
; int i;
printf("原先陣列:");
for (i = 0; i < 10; i++)
printf("\n");
/*printf("氣泡排序:");
bublesort(data, 10);
for(i=0;i<10;i++)
printf("\n");
printf("快速排序:");
quicksort(data, 0, 9);
for(i=0;i<10;i++)
printf("\n");
printf("插入排序:");
binsertsort(data,10);
for(i=0;i<10;i++)
printf("\n");
printf("希爾排序:");
shellsort(data, 10);
for(i=0;i<10;i++)
printf("\n");
printf("選擇排序:");
selectsort(data, 10);
for(i=0;i<10;i++)
printf("\n");
int data[11] = ;
int i;
printf("原先陣列:");
int data[11] = ;
for(i=1;i<11;i++)
printf("\n");
printf(" 堆排序:");
heapsort(data, 10);
for(i=1;i<11;i++)
printf("\n");
printf("歸併排序:");
mergesort(data, 0, 9);
for(i=0;i<10;i++)
printf("\n");*/
printf("基數排序:");
radixsort(data, 10);
for (i = 0; i < 10; i++)
printf("\n");
return 0;
}/*--------------------氣泡排序---------------------*/
void bublesort(int data, int n)
} }}/*--------------------快速排序---------------------*/
int findpos(int data, int low, int high)
data[low] = data[high];
while (low < high && data[low] <= t)
data[high] = data[low];
} data[low] = t;
//返回此時t在陣列中的位置
return low;
}//在陣列中找乙個元素,對大於該元素和小於該元素的兩個陣列進行再排序
//再對兩個陣列分為4個陣列,再排序,直到最後每組只剩下乙個元素為止
void quicksort(int data, int low, int high)
int pos = findpos(data, low, high);
quicksort(data, low, pos - 1);
quicksort(data, pos + 1, high);
}/*--------------------插入排序---------------------*/
void binsertsort(int data, int n)
else
} int j = i;
//讓data與已經排序好的陣列的各個元素比較,小的放前面
while ((j > low) && data[j - 1] > temp)
data[low] = temp; }}
/*--------------------希爾排序---------------------*/
void shellsort(int * data, int n)
//和上面的for迴圈一起,將組中小的元素換到陣列的前面
data[j + step] = key;
} }}/*--------------------選擇排序---------------------*/
void selectsort(int data, int n)
} //若陣列中真的有比假設的元素還小,就交換
if (i != mix) }}
/*--------------------堆排序---------------------*/
//堆排序將陣列先組成二叉樹,預設從陣列的data[1]開始排,data[0]是
//無效資料
void heapsort(int data, int n)
//迴圈每個結點,將大的結點交換到堆頂
for (i = n; i > 1; i--)
}//交換函式
void swap(int data, int i, int j)
void heapadjust(int data, int i, int n)
if (temp >= data[j])
data[i] = data[j];
i = j;
} data[i] = temp;
}/*--------------------歸併排序---------------------*/
void mergesort(int data, int first, int last)
return;
}void merge(int data, int low, int mid, int high)
else
} //左序列如果有剩下元素未排序,加到臨時陣列的末尾
if (left_low <= left_high)
} //右序列如果有剩下元素未排序,加到臨時陣列的末尾
if (right_low <= right_high)
} //將排好序的小分組轉移到原陣列中
for (i = 0; i < high - low + 1; i++)
free(temp);
return;
}/*--------------------基數排序---------------------*/
//該函式的作用是找出num的pos位數的數字(比如:23的個位數數字是3)
int getnumpos(int num, int pos)
return (num / temp) % 10;
}void radixsort(int data, int n)
//pos最大為31為數,計算機能承受的最大範圍了
for (pos = 1; pos <= 31; pos++)
//該for迴圈是將上面的for迴圈已經按照某個位數(pos)排列好的元素存入陣列
for (i = 0, j = 0; i < 10; i++)
//清空網格,以便給下個位數排列
radixarrays[i][0] = 0;
} }}
資料結構 C語言實現選擇排序
一 選擇排序簡介 選擇排序是外層進行n 1趟排序,內層進行n 1趟排序,每一趟選出最大或最小的資料放在最前面。二 實現 include 將兩個資料交換 void swap int ina int inb 函式功能 選擇排序,把資料從小到大排序 引數解釋 inarray 輸入的陣列 inlen 輸入的...
資料結構 C語言實現希爾排序
一 希爾排序簡介 先將整個待排元素序列分割成若干個子串行 由相隔某個 增量 的元素組成的 分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序 增量足夠小 時,再對全體元素進行一次直接插入排序。因為直接插入排序在元素基本有序的情況下 接近最好情況 效率是很高的,二 c語言 實...
資料結構C語言實現 希爾排序
希爾排序 這方法太噁心了,可以和冒泡 直插 選擇進行組合,就是希爾排序裡要內嵌其他排序,可是再希爾排序裡實現其他排序,要進行一些腦筋急轉彎的改變,所以剛學的時候肝了一天才弄明白 大體說一說思路吧,以內嵌氣泡排序為例 加入這裡有乙個無序數字串 9876543210 我們要給他分組,一般會把總長除以二作...