資料結構的排序(C語言實現)

2021-09-19 11:29:45 字數 4516 閱讀 9543

排序:就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作

穩定性:在排序過程中,有相同的元素,經過排序以後,相同元素按照以前的順序未曾發生變化則稱這種排序是穩定的,反之不穩定。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 我們要給他分組,一般會把總長除以二作...