本文目錄一覽:
c語言三種排序
常用的c語言排序演算法主要有三種即冒泡法排序、選擇法排序、插入法排序。
一、冒泡排序冒泡排序:
是從第一個數開始,依次往後比較,在滿足判斷條件下進行交換。代碼實現(以降序排序為例)
#includestdio.h
int main()
{
int array[10] = { 6,9,7,8,5,3,4,0,1,2 };
int temp;
for (int i = 0; i 10; i++)
{//循環次數
for (int j = 0; j 10 – i-1; j++)
{
if (array[j] array[j+1])
{//前面一個數比後面的數大時發生交換 temp = array[j];
array[j] = array[j+1];
array[j + 1] = temp;
}
}
} //列印數組 for (int i = 0; i 10; i++) printf(“%2d”, array[i]); return 0;}}
二、選擇排序以升序排序為例:
就是在指定下標的數組元素往後(指定下標的元素往往是從第一個元素開始,然後依次往後),找出除指定下標元素外的值與指定元素進行對比,滿足條件就進行交換。與冒泡排序的區別可以理解為冒泡排序是相鄰的兩個值對比,而選擇排序是遍曆數組,找出數組元素與指定的數組元素進行對比。(以升序為例)
#includestdio.h
int main()
{
int array[10] = { 6,9,7,8,5,3,4,0,1,2 };
int temp, index;
for (int i = 0; i 9; i++) {
index = i;
for (int j = i; j 10; j++)
{
if (array[j] array[index])
index = j;
}
if(i != index)
{
temp = array[i];
array[i] = array[index];
array[index] = temp;
}
for(int i=0;i10:i++)
printf(“%2d”array[i])
return 0;
}
三、快速排序
是通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。
void QuickSort(int* arr, int size)
{
int temp, i, j;
for(i = 1; i size; i++)
for(j=i; j0; j–)
{
if(arr[j] arr[j-1])
{
temp = arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp;
}
}
}
c語言中 順序表的選擇排序是什麼?
選擇排序(Selection sort)是一種簡單直觀的排序演算法。工作原理是每一次從待排序的數據元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的數據元素排完。
以下是一個實現選擇排序的例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
#define SWAP(x, y, t) ((t) = (x), (x) = (y), (y) = (t))
//將list中的n個數據,通過選擇排序演算法排序。
void selete_sort(int list[], int n)
{
int i, j, min, temp;
for (i = 0; i n – 1; i++){
min = i;
for (j = i + 1; j n; j++)//找出最小元素的下標。
if (list[j] list[min])
min = j;
SWAP(list[i], list[min], temp);//交換最小元素到當前起始位置。
順序表的排序,二分法查找的c語言程序
#includestdio.h
int fun(int a[],int n,int key)
{i
nt low,mid,high;//low、mid、high是三個索引分別指向數組的下標low=0;//low指向數組a[]的第一個元素,即下表為0的元素
high=n-1;//lhigh指向數組a[]的最一個元素,即下表為n-1的元素,n為數組的長度
while(low=high)//循環終止條件是lowhigh的時候
{
mid=(low+high)/2;//所謂二分查找就在這裡,每次都讓mid指向數組下標等於low和high之和的一半的元素i
f(keya[mid])//如果a【mid】大於要查找的元素,說明要查找的元素在low和mid之間,這是需要把high重新置為mid-1
(high=mid-1);//這裡應該是{},不能使()吧
else if(keya[mid])//這裡同理,如果a【mid】小於要查找的元素,說明要查找的元素在mid和high之間,這是需要把low重新置為mid+1
(low=mid+1);
else
return mid;//剩下的就是相等的情況,直接返回mid就是查找到的結果
}
return -1;//執行到這一步就說明,lowhigh,沒有找到要查找的元素,返回-1表示沒有結果
}
main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int a,b,c;
b=4;
c=fun(a,10,b);
if(c==1)
printf(“not found”);
else
printf(“psition %d\n”,c);
}
C語言順序表的基本操作
#include stdio.h
#include stdlib.h
typedef int DataType; // 定義數據數據類型
typedef struct {
DataType *data; // data指向數據區的首個數據
int length; // 數據長度
}SqList;
void Sort(SqList *L) {
int i,j,k;
DataType tmp;
for(i = 0; i L-length – 1; ++i) {
k = i;
for(j = i + 1; j L-length; ++j)
if(L-data[k] L-data[j])
k = j;
if(k != i) {
tmp = L-data[k];
L-data[k] = L-data[i];
L-data[i] = tmp;
}
}
}
SqList *CreateList(DataType a[],int n) {
int i;
SqList *L;
L = (SqList *)malloc(sizeof(SqList));
L-data = (DataType *)malloc(n * sizeof(DataType));
L-length = n;
for(i = 0; i n; ++i) L-data[i] = a[i];
Sort(L);
return L;
}
int InsertList(SqList *L,DataType x) {
int i,j;
for (i = 0;i L-length;i++) {
if(x = L-data[i]) {
for(j = L-length;j = i;j–)
L-data[j + 1] = L-data[j]; // 結點後移
L-data[i] = x;
L-length++;
return 1;
}
}
L-data[L-length++] = x;
return 1;
}
int RemoveListElem(SqList *L,DataType d) {
int i,j;
for(i = 0; i L-length; ++i) {
if(L-data[i] == d) {
for(j = i; j L-length – 1; ++j)
L-data[j] = L-data[j + 1];
L-length–;
return 1;
}
}
return 0;
}
SqList *AndList(SqList *A, SqList *B) { /* A∩B */
int i,j,k = 0;
int len = (A-length B-length) ? B-length : A-length;
SqList *C = (SqList *)malloc(sizeof(SqList));
C-length = len;
C-data = (DataType *)malloc(len * sizeof(DataType));
for(i = 0; i A-length; ++i) {
for(j = 0; j B-length; ++j) {
if(A-data[i] == B-data[j]) {
C-data[k++] = A-data[i];
break;
}
}
}
C-length = k;
return C;
}
SqList *OrList(SqList *A, SqList *B) { /* A∪B */
int i,j,flag;
DataType e;
SqList *C = (SqList *)malloc(sizeof(SqList));
C-length = A-length + B-length;
C-data = (DataType *)malloc(C-length * sizeof(DataType));
for(i = 0; i A-length; ++i) C-data[i] = A-data[i];
for(i = 0; i B-length; ++i) {
e = B-data[i];
flag = 1;
for(j = 0; j C-length; ++j) {
if(e == C-data[j]) {
flag = 0;
break;
}
}
if(flag) InsertList(C,e);
}
return C;
}
void PrintList(SqList *L) {
int i;
for(i = 0; i L-length; ++i)
printf(“%d “,L-data[i]);
printf(“\n”);
}
void FreeList(SqList *L) {
free(L-data);
free(L);
}
void main() {
DataType x;
DataType arra[] = {36,24,31,5,90,65,70,39,37};
DataType arrb[] = {9,8,43,51,37,89,33,46,29,80,56};
int alen = sizeof(arra)/sizeof(arra[0]);
int blen = sizeof(arrb)/sizeof(arrb[0]);
SqList *A = CreateList(arra,alen);
printf(“A線性表為: “);
PrintList(A);
SqList *B = CreateList(arrb,blen);
printf(“B線性表為: “);
PrintList(B);
SqList *C = AndList(A,B);
SqList *D = OrList(A,B);
printf(” C = A∩B: “);
PrintList(C);
printf(” D = A∪B: “);
PrintList(D);
printf(“在D表中插入數據 : “);
scanf(“%d”,x);
InsertList(D,x);
printf(“D表插入x後 :”);
PrintList(D);
printf(“刪除D表中數據 : “);
scanf(“%d”,x);
RemoveListElem(D,x);
printf(“刪除x後的D表為 :”);
PrintList(D);
FreeList(A);
FreeList(B);
FreeList(C);
FreeList(D);
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/194673.html